shiro配置的demo项目,学习项目:https://github.com/Smith-Cruise/Spring-Boot-Shiro
使用spring结合shiro的配置时,主要就是纠结与继承重写方法的作用,以及其中的执行时机。
用反推导的方式来研究shiro,其中bean、database包下的东西不太重要
首先查看WebController.java类,可以看到起到权限判断的注解。
那么有一个问题,程序是怎么获得用户的权限信息,答案是从token里面获取啊!那token是保存在Authorization这个请求头里面的,程序是怎么知道在这个请求头里面的,那就得要理解重写方法的作用了
所以请求值执行之前都会被拦截,然后调用isAccessAllowed()这个方法,接着到isLoginAttempt()这个方法中,可以看到是判断请求中是否包含Authorization这个请求头的
回到上面,虽然不管是否写到请求头都会返回true,但是如果携带token的话会执行executeLogin()这个方法,来看下这个是拿来干嘛的。
在这里我们可以看到是根据token来创建Subject对象,这个对象是保存在线程上下文的。
如果是访问的是带@RequiresRoles、@RequiresPermissions这些带注解的方法,那么怎么根据token获取权限、角色的信息呢?接下来就是看AuthorizingRealm的子类,即MyRealm
从上面我们可以看到三个重写方法,调用的顺序应该是support->doGetAuthenticationInfo->doGetAuthorizationInfo,先查看token类型是否合法,当然可以自行发挥了,然后在判断用户是否合法,之后是将用户的角色信息和权限信息复制到simpleAuthorizationInfo这么个对象里面了
当然,myRealm的bean注入发生在下面过程,应该是根据类的class自动匹配到bean
注解的判断表达式参数就是使用该对象中的数据
其他重写方法的说明就不用进行累赘说明了,正常看的懂的
剩下的就是org.inlighting.shiro.ShiroConfig这个配置类,其中大多数都是模板化配置了,知识其中几个参数要配置而已