springboot-sample
介绍
springboot简单示例-自定义加密进行登录验证 跳转到发行版
软件架构(当前发行版)
- Springboot3.1.3
- hutool
- bcprov-jdk18on
安装教程
git clone --branch 自定义加密进行登录验证 [email protected]:simen_net/springboot-sample.git
主要功能
使用SM2库对密码进行签名验证
- 新建自定义加密编码器Sm2PasswordEncoder.java,使用KeyUtils中的SM2加密对象进行签名验证:
SM2_OBJ.verifyHex(rawPassword.toString(),encodedPassword,KeyUtils.STR_UUID)
- 在SystemController中的
@GetMapping("/login")
中将SPRING_SECURITY_LAST_EXCEPTION
的错误消息注入login.ftl - 新建JwtUserDetails和JwtUserDetailsService类,重写用户验证对象的实现和用户验证功能实现
- 在WebSecurityConfig中,定义
DaoAuthenticationProvider
使用Sm2PasswordEncoder
编码器、JwtUserDetailsService
用户验证服务
- 新建自定义加密编码器Sm2PasswordEncoder.java,使用KeyUtils中的SM2加密对象进行签名验证:
代码逻辑说明
- 在JwtUserDetailsService中可以从数据库中读取用户注册信息
-
- 在代码中硬注册simen、admin两个用户,强制密码签名为
SM2_OBJ.signHex("123456",KeyUtils.STR_UUID)
- 当用户不存在时
return new JwtUserDetails();
- 在代码中硬注册simen、admin两个用户,强制密码签名为
- 在Sm2PasswordEncoder.java中的
public boolean matches(CharSequence rawPassword, String encodedPassword)
-
- 判断
rawPassword
或者encodedPassword
为空,则throw new UsernameNotFoundException("用户不存在");
- 校验密码签名false时
throw new BadCredentialsException("账号密码验证失败")
- 抛出异常的目的是为了在login.ftl中显示正确的错误消息
- 判断