spring配置shiro的案例学习笔记

shiro配置的demo项目,学习项目:https://github.com/Smith-Cruise/Spring-Boot-Shiro

使用spring结合shiro的配置时,主要就是纠结与继承重写方法的作用,以及其中的执行时机。

用反推导的方式来研究shiro,其中beandatabase包下的东西不太重要

首先查看WebController.java,可以看到起到权限判断的注解。

那么有一个问题,程序是怎么获得用户的权限信息,答案是从token里面获取啊!那token是保存在Authorization这个请求头里面的,程序是怎么知道在这个请求头里面的,那就得要理解重写方法的作用了

所以请求值执行之前都会被拦截,然后调用isAccessAllowed()这个方法,接着到isLoginAttempt()这个方法中,可以看到是判断请求中是否包含Authorization这个请求头的

回到上面,虽然不管是否写到请求头都会返回true,但是如果携带token的话会执行executeLogin()这个方法,来看下这个是拿来干嘛的。

在这里我们可以看到是根据token来创建Subject对象,这个对象是保存在线程上下文的。

如果是访问的是带@RequiresRoles@RequiresPermissions这些带注解的方法,那么怎么根据token获取权限、角色的信息呢?接下来就是看AuthorizingRealm的子类,即MyRealm

从上面我们可以看到三个重写方法,调用的顺序应该是support->doGetAuthenticationInfo->doGetAuthorizationInfo,先查看token类型是否合法,当然可以自行发挥了,然后在判断用户是否合法,之后是将用户的角色信息和权限信息复制到simpleAuthorizationInfo这么个对象里面了

当然,myRealmbean注入发生在下面过程,应该是根据类的class自动匹配到bean

注解的判断表达式参数就是使用该对象中的数据

其他重写方法的说明就不用进行累赘说明了,正常看的懂的

剩下的就是org.inlighting.shiro.ShiroConfig这个配置类,其中大多数都是模板化配置了,知识其中几个参数要配置而已

 

posted @ 2020-11-13 18:02  骑猪飞天  阅读(147)  评论(0编辑  收藏  举报