最新 springboot2.x 整合 shiro 身份认证

10 篇文章 0 订阅
3 篇文章 0 订阅

背景

shiro是一套工业级的身份及权限验证模块,具体功能和原理在此实战中不多累述。总之 Shiro 的核心是两个功能,一是 身份验证 (通俗说就是登录),二是 权限验证(此用户有没有权限操作)。

这里使用 Springboot 2.x 搭建,引入的是 shiro-spring-boot-web-starter,注意其中的web不能少,如果是web项目的话。这里需要指出,springboot-shiro 相比于 Spring-shiro ,为我们做了很多自动化配置,具体帮助我们注入了哪些类,后文再阐述。

github地址 : https://github.com/genggengyuhuai/shiro_demo

项目结构:

首先声明:因为是demo,所以连Mysql都不需要,使用内存数据库 H2,另外 Springboot 会自动执行 resource目录下的 schema.sql,进行建表和增加数据。
在这里插入图片描述

在这里插入图片描述

Controller 包: 用于处理前端请求
Service包 : 用于提供服务
popo包: 存放简单类(由Mybatis generator生成)
dao 包 : 存放 mapper 接口 (由Mybatis generator生成)
shiro包: 存放 Shiro 相关
config 包: Spring 相关配置

resources下的:
mapper : UserMapper.xml 等 xml 文件
statics : 一些 css,js,font 等静态文件
templates : html 模板文件

项目分析:

从 shiro 包开始:
ShiroConfig.java :此处第一个红框是Springboot配置shiro的一个坑,按理说Authorizer这么重要的类会被自动配置好而不用我们手动配置,但是有个bug,详情分析见我另一篇

https://blog.csdn.net/qq_37186947/article/details/103847945

第二个Bean是用来设置过滤规则的,要注意把静态文件和 login登录url 都设置成 anon 匿名可访问的,否则会出循环拦截问题。至于 anon , authc , logout 的具体用法和含义请参阅 shiro 官方文档。

在这里插入图片描述
 
然后我们要有一个用于接受登录请求的Controller
这里我们根据前端传入过来的用户名和密码构建一个 UserNamePasswordToken,然后通过 subject.login() 将其送入到 shiro 中进行登录,这个 token 会流经我们下面自定义的 Realm 中进行判断,最终返回结果或者异常。
在这里插入图片描述
 
UserRealm.java: 是整个Shiro中真正我们自定义的部分,这里先只演示身份认证。我们只需要根据token中的userName,调用自己的业务逻辑,把User对象查出来,而密码比对的任务是交给 Shiro 来做的。

还要注意的一点是,交给 shiro 的 user 对象,如果登录成功是会被缓存下来,以后在业务中可以调用 User user = (User)SecurityUtils.getSubject().getPrincipal(); 获取当前用户对象,而这个对象就是我们代码中第 39 行的对象。
在这里插入图片描述

ShiroUtils.java: 就是封装了一些工具的类,例如密码加盐,获取当前用户的User对象,注销等静态方法。其中加密规则可以自定义,详情参考 Shiro 官方文档。

在这里插入图片描述

结果测试:

一:输入其他 url 会被重定向到登录界面。
二:输入错误的用户名或密码,均无法通过。
三:输入正确用户名和密码后,返回成功,并产生cookie.
在这里插入图片描述

github地址 : https://github.com/genggengyuhuai/shiro_demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值