2017-04-26 93 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

相關問題