Shiro实现登录功能的流程及配置

Shiro实现登录功能的流程及配置,第1张

①login.html 发送AJAX异步请求到服务器,携带 username + password

②进入服务器,首先经过spring的编码过滤器,处理编码.

web.xml

③ 在服务器启动时,便创建了securityManager, 类似于dispatcherServlet 对进行登录的 *** 作进行统一的管理.

​ Username + Password 生成Token,用于验证的准备

④ 创建自己的Realm,同时数据源交给spring容器管理

shiro.ini

告知shiro,配置数据源realm

⑤ 安全管理器从spring中取出数据源,进行验证.(先验证username ,再验证密码,验证成功则轮裂清将用户存入缓存(session),以备验证使用)

后续页面发送请求携带sessionId,验证是否存在此用户.(下为源码)

⑥验证完成后,经过一系列的过滤器

​ 这些过滤器配置在shiro.xml中.

在web.xml中配置shiro的过滤器源饥代理DelegatingFilterProxy.在服务器启动时,到spring中寻找到这些过滤器的对象,形成调用链.

shiro的过滤器一般优先于服务器的过滤器执行.

⑦自建过滤器,返回AJAX信息

⑧经过一系列过滤器,页面接收返腊前回信息

至此,shiro登录认证完成,用户信息存在于session中(此session被shiro封装).

在同一个会话中,页面的多次请求将通过携带SessionId,找到服务器的用户信息验证是否已登录.

下为源码

Shiro 的注销功能 也是获取session,清空session.

在ShiroRealm 中 对所有 引入的service 加上注解 @Lazy ,防止 事务回滚失败。 具体原因看该文章

新增整合swagger2,因为之前整合了shiro,所以再访问swagger的时候总是被拦截导致无法访问,因此在ShiroConfiguration配置文件中,放开对swagger的拦截

新增CORS跨域配置。

待解决问题:前端利用vue传sessionid,后台通过shiro接收一直接收不到,后前端改成jQuery才可以,不知道问题出在哪

新增@RequiresRoles角色控制,个人感觉@RequiresRoles角色控制,属于粗粒度,@RequiresPermissions属于细粒度,因为@RequiresPermissions能给每个接口定义不同的权限

如下:

@RequiresRoles(value = "admin")

@RequiresPermissions("user:updateSysUser")

两者属于and 的关系,同时添加注解,会先验证此接口是否有规定的角色,然后验证是否有该权限,必须同时满足才会通过认证

@RequiresPermissions多权限是分两种的,这里要注意

第一种:必须全部符合(默认不写或者在后面添加logical = Logical.AND)

@RequiresPermissions(value={“studentMan:find_record_list”,“teacher:find_record_list”皮前基})

上面这种情况是默认当前对象必须同时全悔缓部拥有指定权限

第二种:符合其中一个即可(logical = Logical.OR)

@RequiresPermissions(value={“studentMan:find_record_list”,“teacher:find_record_list”},logical=Logical.OR)

上面这种情况则是只要有其中燃谨一个权限即可访问

pom文件

主要目的通过sessionid验证用户的登录状态

权限表

角色表

最近项目上要改造为Spring Boot,权限孝态是本人使用迟肢的Shiro管理的。最快的办法是把Xml换成Java Config,但是配置也是不少。在网上查帖子也全是这样做的。本人想,Shiro有Spring Boot的自动化组件吗?打开Shiro的官网并没有找到,在Shiro的github的上,发现了它的自动化组件,有非Web环境的和Web环境的。在百度上没找码慎世到关于shiro-starter的使用,就想着写写博客讲一下。

看了源码,shiro-spring-boot-web-starter依赖了shiro-spring-boot-starter,本人就说说shiro-spring-boot-web-starter的使用。

在resources/META-INF/ additional-spring-configuration-metadata.json 文件中,描述了Shiro提供的配置项。

配置项描述文件,在

这个包里也有一部分配置。

本人将所有的配置整理列出来

下面就讲讲怎么使用

这样就完成了Shiro的自动化配置。

让ShiroConfig继承ShiroWebFilterConfiguration( org.apache.shiro.spring.config.web.autoconfigure.ShiroWebFilterConfiguration )类,重写ShiroFilterFactoryBean方法,就可以达到目的。

今天看的shiro的自动化组件,晚上写博文,本人shiro用的还不错,spring boot的东西也是用了很长时间。写博文的时候,同时也是头一次写了shiro自动化组件的demo。在测试授权的时候,当无权限的时候,一直给我报安全管理器找不到的问题。检查测试了半天,才发现是未授权url未配置的原因。

使用shiro的自动化配置,可以轻易的完成了shiro的配置。虽然很好,但也隐藏了很多的细节,以至于知道怎么用,出了问题就不知道怎么解决。建议有空还是看看底层如何实现的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8216539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存