SpringSecurity之UserDetailsService接口讲解

SpringSecurity之UserDetailsService接口讲解

当什么也没有配置的时候,账号和密码是由Spring Security定义生成的。而在实际项目中 账号和密码都是从数据库中查询出来的。 所以我们要通过自定义逻辑控制认证逻辑。 如果需要自定义逻辑时,只需要实现UserDetailsService接口即可

1 定义UserDetailsService接口

在这里插入图片描述

2 返回值UserDetails
  1. 类中的方法说明
// 表示获取登录用户所有权限 
Collection<? extends GrantedAuthority> getAuthorities(); 
// 表示获取密码 
String getPassword(); 
// 表示获取用户名 
String getUsername(); 
// 表示判断账户是否过期 
boolean isAccountNonExpired(); 
// 表示判断账户是否被锁定 
boolean isAccountNonLocked(); 
// 表示凭证{密码}是否过期 
boolean isCredentialsNonExpired(); 
// 表示当前用户是否可用 
boolean isEnabled();
  1. UserDetails实现类
    在这里插入图片描述
    我们只要使用User这个实体类即可
3 User实体类
  1. 方法参数:
    ① username:用户名,为表单传递过来的数据,默认情况下必须为username,否则无法接受。
    ② password:密码,需要加密
    ③ enabled:用户是否可用
    ④ accountNonExpired:账号是否过期
    ⑤ credentialsNonExpired:凭证是否过期
  2. User类
    在这里插入图片描述
4 PasswordEncoder 接口讲解
  1. 接口方法
// 表示把参数按照特定的解析规则进行解析 
String encode(CharSequence rawPassword); 
// 表示验证从存储中获取的编码密码与编码后提交的原始密码是否匹配。如果密码匹 配,则返回 true;如果不匹配,则返回 false。第一个参数表示需要被解析的密码。第二个 参数表示存储的密码。 
boolean matches(CharSequence rawPassword, String encodedPassword); 
// 表示如果解析的密码能够再次进行解析且达到更安全的结果则返回 true,否则返回 false。默认返回false。 
default boolean upgradeEncoding(String encodedPassword) { return false; } 
 
  1. 接口实现类 BCryptPasswordEncoder
    在这里插入图片描述
    说明:
    BCryptPasswordEncoder是Spring Security官方推荐的密码解析器,平时多使用这个解析器。 BCryptPasswordEncoder是对bcrypt强散列方法的具体实现。是基于Hash算法实现的单向加密。可以通过strength控制加密强度,默认10.。
  2. 代码测试
@Test 
public void test01(){ 
	// 创建密码解析器 
	BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); 
	// 对密码进行加密 
	String atguigu = bCryptPasswordEncoder.encode("atguigu"); 
	// 打印加密之后的数据 
	System.out.println("加密之后数据:\t"+atguigu); 
	// 判断原字符加密后和加密之前是否匹配 
	boolean result = bCryptPasswordEncoder.matches("atguigu", atguigu); 
	// 打印比较结果 
	System.out.println("比较结果:\t"+result); 
} 
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值