3 回答
TA贡献1111条经验 获得超0个赞
尝试从配置中删除此块。理论上,Spring 在幕后创建了所有这些 bean(自动获取您的 passwordEncoder 和 UserDetailsService)。
@Autowired
@Qualifier("myuserdet")
UserDetailsService userDetailsService;
protected void init(AuthenticationManagerBuilder auth) throws Exception {
System.out.println("I'm here");
auth.authenticationProvider(authProvider());
}
@Bean
public DaoAuthenticationProvider authProvider() {
System.out.println("got here");
DaoAuthenticationProvider authProvider = new
DaoAuthenticationProvider();
authProvider.setUserDetailsService(userDetailsService);
authProvider.setPasswordEncoder(passwordEncoder());
return authProvider;
}
如果它不起作用,请尝试重命名您的 UserDetailsService(尽管这是一个远景)。
TA贡献1798条经验 获得超3个赞
你的代码中有很多噪音。
1.您定义了自定义密码,它只是扩展了 BCryptPasswordEncoder。我建议返回
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
2. 您定义了另一个 User 模型,该模型什么也不做,并且授予权限的列表为空。这很奇怪,因为如果权限列表为空,它应该会失败。请退回进口
org.springframework.security.core.userdetails.User;
//..
return new User(userName, encodedPassword, Collections.singletonList(new SimpleGrantedAuthority("USER")
3.最好为你的豆子使用另一个名字,而不是春天的名字。请将 UserDetailsService 重命名为 CustomUserDetailsService 并且不要在您的配置中使用限定符。
4.请确保当您将密码保存在数据库中时,它们会使用 BCryptPasswordEncoder 进行哈希处理。
TA贡献1906条经验 获得超10个赞
好的。另一个想法:根据文档,此方法不应返回 null:
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
AuthorityUtils.NO_AUTHORITIES;而是返回。
理论上,它可以NullpointerException在您的 UserDetailsService 创建主体后的身份验证期间引发。如果那里有一个将军catch (Exception e),那么它将被简单地嵌入到AuthenticationException.
- - 编辑
哎哟!
您还应该将返回值更改为类true中的最后四个方法MyUserPrincipal:
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
你的校长总是被禁用和过期等等。当然是不允许登录的!:)
添加回答
举报