我在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;),但这不起作用。
答案 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" />