Springboot简单功能示例-4 自定义加密进行登录验证

springboot-sample

介绍

springboot简单示例 跳转到发行版 查看发行版说明

软件架构(当前发行版使用)

  1. springboot
  2. hutool-all 非常好的常用java工具库 官网 maven
  3. bcprov-jdk18on 一些加密算法的实现 官网 maven

安装教程

git clone --branch 4.自定义加密进行登录验证 git@gitee.com:simen_net/springboot-sample.git
 

功能说明

使用bcprov-jdk18on的sm2加密算法对用户密码进行签名及认证

发行版说明

  1. 完成基本WEB服务 跳转到发行版
  2. 完成了KEY初始化功能和全局错误处理 跳转到发行版
  3. 完成了基本登录验证 跳转到发行版
  4. 完成了自定义加密进行登录验证 跳转到发行版 查看发行版说明
 
 

自定义加密进行登录验证

使用SM2库对密码进行签名验证

  1. 新建自定义加密编码器Sm2PasswordEncoder.java,使用KeyUtils中的SM2加密对象进行签名验证:SM2_OBJ.verifyHex(rawPassword.toString(),encodedPassword,KeyUtils.STR_UUID)
  2. SystemController中的@GetMapping("/login")中将SPRING_SECURITY_LAST_EXCEPTION的错误消息注入login.ftl
  3. 新建JwtUserDetailsJwtUserDetailsService类,重写用户验证对象的实现和用户验证功能实现
  4. WebSecurityConfig中,定义DaoAuthenticationProvider使用Sm2PasswordEncoder编码器、JwtUserDetailsService用户验证服务

代码逻辑说明

  1. JwtUserDetailsService中可以从数据库中读取用户注册信息
    • 在代码中硬注册simen、admin两个用户,强制密码签名为SM2_OBJ.signHex("123456", KeyUtils.STR_UUID)
    • 当用户不存在时return new JwtUserDetails();
  2. Sm2PasswordEncoder.java中的public boolean matches(CharSequence rawPassword, String encodedPassword)
    • 判断rawPassword或者encodedPassword为空,则throw new UsernameNotFoundException("用户不存在");
    • 校验密码签名false时throw new BadCredentialsException("账号密码验证失败")
    • 抛出异常的目的是为了在login.ftl中显示正确的错误消息
posted @ 2023-09-18 10:48  超级修理工  阅读(321)  评论(0)    收藏  举报