2017-04-26 96 views
0

我寻觅的StackOverflow,发现关于注射AuthenticaitonManager以下问题:How To Inject AuthenticationManager using Java Configuration in a Custom Filter,但是这个问题是三十岁了,我的配置是所有Java。错误创建AuthenticaitonManager豆

迁移从另一个项目代码和Spring 1.5.3启动后,我得到以下错误:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 
15:48:00.316 [main] ERROR o.s.b.SpringApplication#815 Application startup failed 
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityServiceImpl': Unsatisfied dependency expressed through field 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationManager' defined in class path resource [org/springframework/boot/autoconfigure/security/AuthenticationManagerConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.authentication.AuthenticationManager]: Factory method 'authenticationManager' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDetailsServiceImpl' defined in file [/Users/intheshell/Desktop/Project_C/target/classes/com/hellokoding/account/service/UserDetailsServiceImpl.class]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 

我得到一个错误,如果我尝试实例的AuthenticationManager该类型不能被实例化。我是否需要“将AuthenticationManager显式暴露为bean”,如下所述:Spring Security Java Config?这是否仍然与2017年和我的情况有关?最佳做法是什么?

这里是我的SecurityServiceImpl

@Controller 
@Service 
public class SecurityServiceImpl implements SecurityService{ 
    @Autowired 
    private AuthenticationManager authenticationManager; 

    @Autowired 
    private UserDetailsService userDetailsService; 

    private static final Logger logger = LoggerFactory.getLogger(SecurityServiceImpl.class); 

    @Override 
    public String findLoggedInUsername() { 
     Object userDetails = SecurityContextHolder.getContext().getAuthentication().getDetails(); 
     if (userDetails instanceof UserDetails) { 
      return ((UserDetails)userDetails).getUsername(); 
     } 

     return null; 
    } 

    @Override 
    public void autologin(String username, String password) { 
     UserDetails userDetails = userDetailsService.loadUserByUsername(username); 
     UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities()); 

     authenticationManager.authenticate(usernamePasswordAuthenticationToken); 

     if (usernamePasswordAuthenticationToken.isAuthenticated()) { 
      SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken); 
      logger.debug(String.format("Auto login %s successfully!", username)); 
     } 
    } 


} 

回答

1

看起来你需要依赖

<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.8.9</version> 
</dependency> 
+0

这定了!谢谢!你能解释一下你是如何发现这种依赖失踪的吗? – InTheShell

+1

这很简单。我做的第一件事是首先谷歌。我进入了缺少的课程和“Maven依赖” – StanislavL

相关问题