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

发布时间 2023-09-18 10:54:00作者: 超级修理工

springboot-sample

介绍

  springboot简单示例-自定义加密进行登录验证 跳转到发行版

软件架构(当前发行版)

  • Springboot3.1.3
  • hutool
  • bcprov-jdk18on

安装教程

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

主要功能

使用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();
    1. Sm2PasswordEncoder.java中的public boolean matches(CharSequence rawPassword, String encodedPassword)
      • 判断rawPassword或者encodedPassword为空,则throw new UsernameNotFoundException("用户不存在");
      • 校验密码签名false时throw new BadCredentialsException("账号密码验证失败")
      • 抛出异常的目的是为了在login.ftl中显示正确的错误消息