Springboot简单功能示例-4 自定义加密进行登录验证
springboot-sample
介绍
软件架构(当前发行版使用)
安装教程
git clone --branch 4.自定义加密进行登录验证 git@gitee.com:simen_net/springboot-sample.git功能说明
使用bcprov-jdk18on的sm2加密算法对用户密码进行签名及认证
发行版说明
自定义加密进行登录验证
使用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用户验证服务
代码逻辑说明
- 在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中显示正确的错误消息
 
- 判断
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号