shiro自定义过滤器对restful风格实现拦截的问题
前提
现在做一个前后端分离的应用,后台用shiro做权限控制,用jwt
代替session的无状态web应用,自定义了一个shiro filter.url用restful
风格.所有的接口url都以/api
开头,我想让所有这种/api
开头的url,如果需要认证就走我自定义的filter.
问题
现在我有四个rul:
/api/user/1
--GET/api/user
--POST/api/user
--PATCH/api/user
--PUT
我现在仅仅想对POST
方法做权限控制,让他走我自定义的那个filter,shiro不知道如何控制.
我的自定义filter在shiro.xml中的配置如下:
<bean id="JWTFilter" class="com.test.web.shiro.stateless.JWTStatelessFilter"/>
<!-- Shiro的Web过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="filters">
<util:map>
<entry key="jwt" value-ref="JWTFilter"/>
</util:map>
</property>
<property name="filterChainDefinitions">
<value>
/api/**=jwt
/**=anon
</value>
</property>
</bean>
我刚开始想过不配置/api/**=jwt
,然后在方法上加@RequiresAuthentication
注解,但是这样子,那个方法不走我的JWTFilter
,如何让这个需要认证的url走我的自定义filter,该如何配置,求解.谢谢.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
按照tomsun28/bootshiro这里的提示,阅读了他的文章:基于shiro的改造集成真正支持restful请求
PathMatchingFilterChainResolver
的getChain
方法:ShiroFilterFactoryBean
的createInstance
方法:然后更改shiro配置文件使用自定义的
RestShiroFilterFactoryBean
:在这里由于我是写在配置文件中的,所以
==
的格式不行,换成了--
的格式.测试了两个方法,/api/user/test
分别有get
和post
请求,然后post添加不用认证,如上xml配置文件所示,测试通过,暂时只用到认证,以上可以解决认证的问题.看基于shiro的改造集成真正支持restful请求还重写了
RestPathMatchingFilter
的pathsMatch
方法,在他的文章中这个类主要是给BJwtFilter
继承做授权使用,我现在暂时只用到认证,所以还没有深入了解.以上已经能够解决同一个url不同的httpMethod请求时的授权问题,如有什么问题,还请大家指出.
我也遇到这个问题了,我是想着对外的api接口都要提供账号、密码来验证,这个怎么做?是在自定义的JWTFilter中,验证账号密码是否正确,是么?方便简单给两行代码看下么?
追问:自定义的JWTFilter你继承的是shiro的哪个filter??
可以看看这个https://github.com/Smith-Crui...