Vue + Spring Boot 项目实战(十三):使用 Shiro 实现用户信息加密与登录认证

重要链接:
「系列文章目录」

「项目源码(GitHub)」

本篇目录

  • 前言
  • 一、用户信息加密
    • 1.hash 算法
    • 2.加盐加密
    • 3.核心代码
  • 二、使用 Shiro 认证登录
    • 1.Shiro 核心概念
    • 2. Shiro 配置与登录验证
    • 3.测试
  • 三、下一步

前言

不过说实话,不拖更还真感受不到这么多人等着我。读者大人们如果感到文章还算有一些价值,不妨点个赞、收个藏、转个发之类,这对我也是一种实打实的鼓励。

另外随着阅读量的增加,问我问题的读者也越来越多了,过去我基本上只要有时间就会帮忙看一下,但是现在真的应对不过来了,所以只能选择性回答啦。像 “为什么我运行xx会 错啊” 之类的问题,最好先有个思路再提问,有的同学甚至连错误信息都不说,以为我掐指一算就能得出结论,那我也太 six 了。还有其实我也挺势利的,一般要是一看诶这哥们儿也没给我点赞也没关注我,那一般就直接忽略啦。在此基础上还说话不好听的,我一怒之下就直接怼回去了,谁还不是 络暴民了咋的。刚好手上有个例子,给大家看一下:

2.加盐加密

加盐,是提高 hash 算法的安全性的一个常用手段。我猜选这个词的哥们儿想表达的意思就是 “我再给你加点料,看你还怎么破解”。其实本质就是在密码后面加一段随机的字符串,然后再 hash。下面是加盐加密与验证的逻辑:

  • 用户注册时,输入用户名密码(明文),向后台发送请求
  • 后台将密码加上随机生成的盐并 hash,再将 hash 后的值作为密码存入数据库,盐也作为单独的字段存起来
  • 用户登录时,输入用户名密码(明文),向后台发送请求
  • 后台根据用户名查询出盐,和密码组合并 hash,将得到的值与数据库中存储的密码比对,若一致则通过验证

加盐为什么能提高安全性/p>

我们知道一个 hash 值(输出)可以对应无数输入,如果不加盐,找到一个和明文密码 hash 结果相同的输入相对容易,但在有盐的情况下,如果不知道盐,找到这种输入的难度就是炸裂性增长。

当然,如果别人有办法拿到数据库中以 hash 值存储的密码,拿到盐的信息也是有可能的,但是由于不同用户盐不同,所以即使有很多用户使用了相同的密码,存储在数据库里的 hash 值也不同,试图窃取信息的黑客只能一个一个的去算,这才是加盐最大的意义所在

在加盐的基础上,我们还可以设置 hash 的迭代次数,即进行多次 hash,进一步加大破解难度,但这就属于小打小闹了。但有的系统能搞上千次迭代,牛批,我只能说有钱,我可买不起这么多服务器。。。

3.核心代码

之前也说过,进入第二阶段以后我就不再赘述无关紧要的步骤了,但我暂时还是尽量多放一些代码,让大家有个适应的过程。当然,这些代码肯定不是简单地赋值粘贴就能用的,如果处理不了出现的问题,说明前面的内容掌握的不太牢靠,还是不要眼高手低,多自己撸点代码吧。

加密在注册与认证中都有体现,但考虑到认证要用到 shiro,所以先讲在注册中的实现。

首先,我们要在数据库的 user 表中添加 salt 字段,并相应地在 pojo 中添加 salt 属性与 get、set 方法。

接着,开发 方法,代码如下:

注意生成 salt 的方法 ,这玩意儿先生成了随机的 byte 数组,又转换成了字符串类型的 base64 编码并返回。base64 没什么意义,这里绕这么一下,只是因为比起字节数组,很多人更习惯于用字符串。

为了实现注册,前端再设计一个注册页面,可以和登录页面保持风格统一。可以参考以下代码:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年9月22日
下一篇 2019年9月22日

相关推荐