3 回答

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
嘗試從配置中刪除此塊。理論上,Spring 在幕后創(chuàng)建了所有這些 bean(自動(dòng)獲取您的 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;
}
如果它不起作用,請(qǐng)嘗試重命名您的 UserDetailsService(盡管這是一個(gè)遠(yuǎn)景)。

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
你的代碼中有很多噪音。
1.您定義了自定義密碼,它只是擴(kuò)展了 BCryptPasswordEncoder。我建議返回
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
2. 您定義了另一個(gè) User 模型,該模型什么也不做,并且授予權(quán)限的列表為空。這很奇怪,因?yàn)槿绻麢?quán)限列表為空,它應(yīng)該會(huì)失敗。請(qǐng)退回進(jìn)口
org.springframework.security.core.userdetails.User;
//..
return new User(userName, encodedPassword, Collections.singletonList(new SimpleGrantedAuthority("USER")
3.最好為你的豆子使用另一個(gè)名字,而不是春天的名字。請(qǐng)將 UserDetailsService 重命名為 CustomUserDetailsService 并且不要在您的配置中使用限定符。
4.請(qǐng)確保當(dāng)您將密碼保存在數(shù)據(jù)庫(kù)中時(shí),它們會(huì)使用 BCryptPasswordEncoder 進(jìn)行哈希處理。

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
好的。另一個(gè)想法:根據(jù)文檔,此方法不應(yīng)返回 null:
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
AuthorityUtils.NO_AUTHORITIES;而是返回。
理論上,它可以NullpointerException在您的 UserDetailsService 創(chuàng)建主體后的身份驗(yàn)證期間引發(fā)。如果那里有一個(gè)將軍catch (Exception e),那么它將被簡(jiǎn)單地嵌入到AuthenticationException.
- - 編輯
哎喲!
您還應(yīng)該將返回值更改為類(lèi)true中的最后四個(gè)方法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;
}
你的校長(zhǎng)總是被禁用和過(guò)期等等。當(dāng)然是不允許登錄的!:)
添加回答
舉報(bào)