xmall学习笔记——登录权限校验

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、xmall中如何使用shiro
  • 二、shiro校验
    • 1.shiro配置
    • 2.登录权限校验
  • 总结


前言

这里我说一说我最近的学习感受。在接触开源项目的时候,我已经储备了一些基础知识,知道了一些框架怎么使用。这个时候看代码,你会有很多疑问,比如执行顺序,为什么这么配置,这个时候你会不断的ctrl+b 一层一层进去看,越看你就越开始怀疑自己,我真的会了吗?我这里可能不是要叫你一定要弄到它的原理什么的,想你传递学习的负面信息。我觉得对于一个新手而言,学习框架的时候应该有清楚的认识,框架肯定是被封装过的,其次你学框架干嘛?是会用了,了解了就可以,那么一开始就没必要深入研究。

一、xmall中如何使用shiro

上面一篇我看了xmall-sso 单点登录功能,我们发现这里面的代码很简单,就是去数据库查询然后校验,生成token放到redis中。还写了一个根据token获取用户数据的方法。那么在服务调用的时候是不是每次都需要自己手动校验登录状态和权限呢?不管每个请求都自己手动写校验还是用AOP实现校验。都需要我们自己实现。一个是增加了项目的复杂度和难度,也容易出错。
xmall学习笔记——登录权限校验_第1张图片
我们可以看到xmall-front-web 中没有使用,但是在xmall-manager-web中用到了shiro。接下来我们来看看如何使用shiro框架来实现登录和权限校验的。

二、shiro校验

1.shiro配置


    <bean id="myRealm" class="cn.exrick.manager.shiro.MyRealm"/>

    
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="myRealm"/>
    bean>

    <bean id="perms" class="cn.exrick.manager.shiro.MyPermissionFilter"/>

    
    <bean id="shiroFilter" class="cn.exrick.manager.shiro.MyShiroFilterFactoryBean">
        
        <property name="securityManager" ref="securityManager"/>
        
        <property name="loginUrl" value="/login"/>
        
        <property name="successUrl" value="/"/>
        
        <property name="unauthorizedUrl" value="/403"/>
        
        <property name="filters">
            <util:map>
                <entry key="perms" value-ref="perms">entry>
                <entry key="roles" value-ref="perms">entry>
            util:map>
        property>
        
        <property name="filterChainDefinitions">
            <value>
                
                
                
                
                
            value>
        property>
    bean>

    
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

这里可以分几个部分
配置securityManager安全管理器 他需要注入一个Realm
配置自定义的realm
配置自定义的filter MyPermissionFilter

2.登录权限校验

看下它具体的执行流程

一个url请求过来,首先被MyPermissionFilter拦截
xmall学习笔记——登录权限校验_第2张图片
这个类里就一个方法isAccessAllowed 这是一个什么方法呢?
ctrl+b 在AccessControlFilter中找到它是一个抽象方法并且找到了在什么地方调用的,这里我们顺带看一下onAccessDenied 这个方法它和isAccessAllowed 区别就是一个在登录时候,用一个在登录失败的时候走这个方法,一般用来重定向到401页面
xmall学习笔记——登录权限校验_第3张图片
在往里看在这个PathMatchingFilter里面终于找到熟悉的代码了xmall学习笔记——登录权限校验_第4张图片
preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用。

看到这儿是不是发现filter(过滤器) 和Interceptor(拦截器)很像 推荐一篇文章Filter与Interceptor 区别

完事后回到controllerxmall学习笔记——登录权限校验_第5张图片
SecurityUtils就是在这里插入图片描述
subject 也是securityManager管理的
最后subject.login(token),去调用框架登录权限校验等

总结

shiro里面的知识还有很多很多,如果当当看一两个案例是不全面的。最好还是去看官方的文档。后面我们改造项目加入JWT

你可能感兴趣的:(shiro,spring,java)