Spring Security - 从数据库中检索用户信息(一)


从数据库中检索用户信息
我们需要重写重写检索用户的逻辑,从数据库中去检索,因此我们重新定义 UserDetailsService
在 WebSecurityConfig 中添加如下代码:
@Bean
UserDetailsService customUserService() { // 注册UserDetailsService 的bean
return new CustomUserService();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(customUserService())
.passwordEncoder(new BCryptPasswordEncoder());
}
.passwordEncoder(new BCryptPasswordEncoder())
指定密码的加密方式,数据库中的密码应该是加密的,防止脱库导致用户密码丢失。
我们将 AuthenticationManagerBuilder 中的用户检索服务类(即 userDetailService )进行自定义
CustomUserService.java 的具体内容如下:
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import java.util.ArrayList;
import java.util.List;
public class CustomUserService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try {
// 检索用户库中的信息
String password = "123";
password = new BCryptPasswordEncoder().encode(password);
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("abc"));
boolean enabled = true;
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
User user = new User(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
return user;
} catch (Exception e) {
throw new UsernameNotFoundException("用户名或密码不正确");
}
}
}
loadUserByUsername 方法是根据用户名去检索用户的真实密码以及权限。然后 spring security 内部再去和输入的密码作比较。
这里为了方便起见,直接返回了一个密码是 123 ,角色是 abc 的用户。
当在页面输入的密码是 123 时,就可以登录成功,否则就会登录失败。
思考
思考:没自定义之前的 用户检索服务类 是哪个呢,在哪里定义的?
扫码分享
版权说明
作者:SQBER
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
{0}
{5}
{1}
{2}回复
{4}
*昵称:
*邮箱:
个人站点:
*想说的话: