Spring不自动装配AuthenticationManager

时间:2016-11-19 13:12:09

标签: java spring intellij-idea spring-security spring-boot

我在IntelliJ中使用Spring启动来创建一个Spring MVC项目。 我使用Spring安全性来验证用户身份。我按照了here找到的指南。

这是我的SecurityService类:

@Service
public class SecurityService {

    @Autowired
    private AuthenticationManager authenticationManager;

    private UserDetailsService userDetailsService = new UserDetailsServiceImpl();

    public String findLoggedInUsername() {
        Object userDetails = SecurityContextHolder.getContext();
        if (userDetails instanceof UserDetails) {
            return ((UserDetails)userDetails).getUsername();
        }
        return null;
    }

    public void autologin(String username, String password) {
        UserDetails userDetails = userDetailsService.loadUserByUsername(username);
        if(userDetails.getUsername().equals("NotFound")) {
            return;
        }
        UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities());

        authenticationManager.authenticate(usernamePasswordAuthenticationToken);

        if (usernamePasswordAuthenticationToken.isAuthenticated()) {
            SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
        }
    }
}

然后我在securityConfig.xml中定义了这些行:

<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="userDetailsServiceImpl">
        <password-encoder ref="encoder"></password-encoder>
    </authentication-provider>
</authentication-manager>

在IntelliJ中,在authenticationManager旁边有一个bean图标,当我点击它时,它会指示我进入AuthenticationManager的Bean定义。

然而,当我尝试编译时,Spring给了我这个错误:

  

project.service.SecurityService中的字段authenticationManager   需要一个类型的bean   &#39; org.springframework.security.authentication.AuthenticationManager&#39;   无法找到。

     
      
  • Bean方法&#39; authenticationManager&#39;没有加载,因为@ConditionalOnBean(类型:   org.springframework.security.config.annotation.ObjectPostProcessor;   SearchStrategy:all)没有找到任何豆子
  •   

当IntelliJ可以时,为什么Spring不能找到bean?我该如何解决这个问题?

BTW我的大部分配置都是使用Spring Boot Autoconfiguration完成的。我已经尝试添加@Qualifier(&#34; authenticationManager&#34;),但这不起作用。

1 个答案:

答案 0 :(得分:0)

我认为component-scan存在问题。您可以在securityConfig.xml创建bean SecurityService,如下所示。

<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="userDetailsServiceImpl">
        <password-encoder ref="encoder"></password-encoder>
    </authentication-provider>
</authentication-manager>

<bean id="securityService" class="SecurityService" />