【Springboot+Vue】做一个权限管理后台(五):引入shiro

前言

由于将用户的账号密码明文存储在数据库中具有不安全性,比如容易泄露,用户觉得不靠谱等,所以我们需要将用户的密码加密存储在数据库中。

  • Hash加密

hash 算法(散列算法、摘要算法)即把任意长度的输入映射为固定长度的输出,比如密码 Evanniubi 变成五位的输出kchpl,这种算法不可逆,且存在信息损失,虽然随着时间推移,出现了字典法、彩虹表法等优化手段,但本质上想要破解还是靠穷举与瞎蒙,而且对于复杂密码来说,破解成本极高。

  • 加盐加密
    加盐,是提高 hash 算法的安全性的一个常用手段。其意义在于利用你的账户生成“盐”,通过这个盐生成密码并用hash加密。
    为什么更安全?
    • 黑客就算拿到数据库中的密码也无法使用。
    • 即使用户使用相同的密码,由于各个用户的盐不同,所以也无法破解用户的密码。

代码部分

我们首先要在user表中添加salt字段,存储每个用户生成的“盐”。
在这里插入图片描述
在SpringBoot的Pojo文件夹下的User同样增加Salt字段以及get,set方法。

  • 引入Service层
    大型的项目中,一般不由控制层直接调用Mapper层,所以需要提供一个Service层,让它担当Controller层与Mapper层的媒介,接收Controller层的请求,处理Mapper层的数据。所以我们在项目文件下创建Service文件夹,创建UserService.java文件,注解@Service,代表Service层,并在其中对UserMapper进行@autowired 。

    @Service
    public class UserService {
         
        
        @Autowired
        private UserMapper userMapper;
        
        public boolean checkUser(User user){
         
            User u = userMapper.selectUser(user);
            if(u == null){
         
                return false;//如果账号密码输入不正确,返回false
            }
            return true;
        }
        
        public boolean isExist(String username){
         
            User user = userMapper.isExist(username);
            if(user != null){
         
                return true;//从数据库可以查找出用户 
            }
            return false;
        }
    }
    
  • 用户注册
    前面说过,每个用户生成唯一的盐,所以我们得保证用户是唯一的,这样就需要用户注册的时候验证数据库中是否存在该账号。

    <select id="isExist" resultType="com.demo.demo.Pojo.User">
       select * from user where username = #{
         username}
    </select>
    
    @PostMapping("/register")
    public String register(@RequestBody User user){
         
        if(userService.isExist(user.getUsername())){
         
            return "用户名已存在";
        }
        // 根据用户名生成盐
        String salt = new SecureRandomNumberGenerator().
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值