0

Je travaille avec Spring MVC d'application à l'aide version Spring 4. J'essaie d'utiliser Apache Shiro pour le cadre de sécurité. J'ai implémenté AuthorizingRealm dans mon application mais un peu comment quand j'essaye de me connecter je reçois l'erreur java.lang.NullPointerException. Mon code est comme ci-dessous:Apache Shiro avec Spring MVC AuthorizingRealm @Autowired java.lang.NullPointerException

@component

CustomSecurCustomSecurityRealmityRealm public class étend AuthorizingRealm {

@Autowired 
UserService userService; 

@Override 
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { 

    Set<String> roles = new HashSet<>(); 
    Collection<org.apache.shiro.authz.Permission> permissions = new HashSet<>(); 

    String username = (String) principals.getPrimaryPrincipal(); 

    User user = userService.findByEmail(username); 

    if (user == null) 
     throw new UnknownAccountException(); 

    for (Role role : user.getRole()) { 
     roles.add(role.getName()); 
     for (Iterator<Permission> iterator = role.getPermissions().iterator(); iterator.hasNext();) { 
      Permission permission = iterator.next(); 
      permissions.add(new WildcardPermission(permission.getName())); 
     } 
    } 

    SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); 
    authorizationInfo.setRoles(roles); 
    authorizationInfo.addObjectPermissions(permissions); 
    return authorizationInfo; 
} 

@Override 
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { 

    UsernamePasswordToken upat = (UsernamePasswordToken) token; 
    User user = userService.findByEmail(upat.getUsername()); 
    if (user != null && user.getPasswordHash().equals(new String(upat.getPassword()))) { 
     return new SimpleAuthenticationInfo(user, user.getPasswordHash(), getName()); 
    } else { 
     throw new AuthenticationException("Invalid username/password!"); 
    } 
} 

}

@Configuration est comme ci-dessous:

@Bean 
public WebSecurityManager securityManager() { 
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); 
    securityManager.setRealm(new CustomSecurityRealm()); 
    return securityManager; 
} 

@Bean 
public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { 
    return new LifecycleBeanPostProcessor(); 
} 

@Bean 
public MethodInvokingFactoryBean methodInvokingFactoryBean() { 
    MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean(); 
    methodInvokingFactoryBean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager"); 
    methodInvokingFactoryBean.setArguments(new Object[] { securityManager() }); 
    return methodInvokingFactoryBean; 
} 

@Bean 
@DependsOn(value = "lifecycleBeanPostProcessor") 
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { 
    return new DefaultAdvisorAutoProxyCreator(); 
} 

@Bean 
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() { 
    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); 
    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager()); 
    return authorizationAttributeSourceAdvisor; 
} 

@Bean 
public ShiroFilterFactoryBean shiroFilterBean() { 
    ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); 
    Map<String, String> definitionsMap = new HashMap<>(); 
    definitionsMap.put("/auth/signIn", DefaultFilter.anon.name()); 
    definitionsMap.put("/auth/login", DefaultFilter.anon.name()); 
    definitionsMap.put("/home/index", "authc"); 
    shiroFilter.setFilterChainDefinitionMap(definitionsMap); 
    shiroFilter.setLoginUrl("/auth/login"); 
    shiroFilter.setSuccessUrl("/home/index"); 
    shiroFilter.setSecurityManager(securityManager()); 
    return shiroFilter; 
} 

Toute personne s'il vous plaît aider moi pourquoi UserService userService obtient n ULL et jeter NullPointerException

+0

est votre classe de configuration avec '@ annotées ComponentScan'? – Rohan

+0

Oui. La classe @Configuration est scan en utilisant @ComponentScan ("mon paquet") –

Répondre