Board logo

标题: 遇到问题----shrio------shiro自定义filters无效 [打印本页]

作者: look_w    时间: 2019-5-13 09:38     标题: 遇到问题----shrio------shiro自定义filters无效

shiro  自定义filters无效


这种情况主要分成两个原因

一是shiro本身的配置有问题,就是shiro未生效。

这种情况建议重新检查一遍shiro的搭建。先不自定义filers。

参考链接:

springMVC与shiro集成

二是拦截顺序设置的有问题

shiro每个URL配置,表示匹配该URL的应用程序请求将由对应的过滤器进行验证。
例如:
[urls]
/index.html = anon
/user/create = anon
/user/** = authc
/admin/** = authc, roles[administrator]
/rest/** = authc, rest
/remoting/rpc/** = authc, perms["remote:invoke"]


URL表达式说明
1、URL目录是基于HttpServletRequest.getContextPath()此目录设置
2、URL可使用通配符,**代表任意子目录
3、Shiro验证URL时,URL匹配成功便不再继续匹配查找。所以要注意配置文件中的URL顺序,尤其在使用通配符时。


Filter Chain定义说明
1、一个URL可以配置多个Filter,使用逗号分隔
2、当设置多个过滤器时,全部验证通过,才视为通过
3、部分过滤器可指定参数,如perms,roles


大家注意到

Shiro验证URL时,URL匹配成功便不再继续匹配查找。

如果我们把/**放在其他/student/**前面,则只会进入/**的拦截,不会再进去/student/**的拦截了。

所以需要注意filterChainDefinitions中的顺序,越仔细的路径应该放在越前面。

/**=athuc尤其不能放在最前,否则就不会进roles的拦截了。


错误的顺序

    <property name="filterChainDefinitions">
                <value>
                    /**/*.* = anon
                    /login = anon
                                /** = authc
                    /student/** =roles["admin,normal,assistant"]
                    /teacher/** =roles["admin,normal,assistant"]
                    /class/** =roles["admin,normal,assistant"]
                    /grade/** =roles["admin,normal"]
                </value>
            </property>




正确的拦截顺序

        <property name="filterChainDefinitions">
                <value>
                    /**/*.* = anon
                    /login = anon
                    /student/** =roles["admin,normal,assistant"]
                    /teacher/** =roles["admin,normal,assistant"]
                    /class/** =roles["admin,normal,assistant"]
                    /grade/** =roles["admin,normal"]        
                    /** = authc
                </value>
            </property>




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0