②进入服务器,首先经过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的配置。虽然很好,但也隐藏了很多的细节,以至于知道怎么用,出了问题就不知道怎么解决。建议有空还是看看底层如何实现的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)