PasswordEncoder 以及 AuthenticationManager 作為Bean丟給Spring容器管理!AuthenticatoinManager 的驗證實作流程拉~ProviderManager,也是預設使用的類別。驗證方式,由於驗證方式有很多種,如 : 「帳密登入、第三方登入、指紋登入...」,因此若都塞在AuthenticationManager,會變得不好維護。AuthenticationProvider 介面做驗證處理public interface AuthenticationProvider {
// 驗證邏輯
Authentication authenticate(Authentication authentication) throws AuthenticationException;
// 是否能處理XXX驗證方式的集合
boolean supports(Class<?> authentication);
}
DaoAuthenticationProvider
DaoAuthenticationProvider 就是結合UserDetailsService以及PasswordEncoder去做驗證。implements,然後覆寫方法!@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
if (role == null) return List.of();
return List.of(new SimpleGrantedAuthority("ROLE_" + role.getName()));
}
@Override
public UserDetails loadUserByUsername(String account) throws UsernameNotFoundException{
return userDao.findByAccount(account).orElseThrow(() -> new UsernameNotFoundException("User not found: " + account));
}
AuthenticationManager 在Controller做驗證啦!本篇文章出自《每天學Java直到今年結束》Day230,大家可以到我的網站上查看~