2017-10-23 13 views
0

현재 스프링 부트 프로젝트에서 Apache Shiro 인증을 사용하고 있습니다. 나는 Cassandra DB 용 Custom Realm을 썼다. realm 객체 내에서 클래스를 autowiring하는 동안 로그인 세부 정보를 제출할 때 null을 반환합니다. 내 응용 프로그램 구성 (사용 @Component 주석) :Apache Shiro 사용자 정의 영역 클래스에서 Autowiring이 작동하지 않습니다.

@Bean(name = "realm") 
@DependsOn("lifecycleBeanPostProcessor") 
public ApplicationRealm realm() { 
    ApplicationRealm realm = new ApplicationRealm(); 
    realm.init(); 
    return realm; 
} 

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

내 응용 프로그램 영역 등급 :

@Configuration 
@ComponentScan("com.scm.auth") 
public class ApplicationRealm extends AuthorizingRealm { 

@Autowired 
IAuthRepository authRepo; 

@Override 
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { 
    Set<String> roles = new HashSet<String>(); 
    try { 
     roles.add("admin"); 
    } catch (Exception rEx) { 
     throw new AuthorizationException(rEx); 
    } 
    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles); 
    info.setRoles(roles); 

    return info; 
} 

@Override 
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { 
    SimpleAuthenticationInfo info = null; 
    UsernamePasswordToken upToken = (UsernamePasswordToken) token; 

    User user = authRepo.findByUserName(upToken.getUsername(), true); // my model class 

     try { 
      if (user.getCurrentPwd().equals(upToken.getPassword())) { 
       info = new SimpleAuthenticationInfo(user, user.getCurrentPwd(), getName()); 
      } else { 
       throw new AuthenticationException("Login name [" + upToken.getUsername() + "] not found!"); 
      } 
     } catch (Exception idEx) { 
      throw new AuthenticationException(idEx); 
     } 
     return info; 


} 

어떤 주석이

을 놓친 있습니까?

답변

1

불일치 주석을 구성한 것처럼 보입니다. ApplicationRealm.java에는 @Configuration 주석이 없어야합니다. @ 구성 요소만으로도이 Custome Realm에 충분합니다.

/*@Configuration*/ 
@ComponentScan("com.scm.auth") 
public class ApplicationRealm extends AuthorizingRealm{ 
/**/ 
}