解决SpringMVC拦截器path路径的坑
SpringMVC拦截器path路径的坑
SpringMVC提供了很方便的拦截器供我们开发使用。在配置文件中通过<mvc:mapping path="" />进行配置拦截的路径,但是这个path在配置的时候有一个小坑
我们都知道在SpringMVC拦截器中的/**是配置全部路径.现在我有一个需求,想要拦截以/user/开头的请求.我的path写为/user/**,这样就能拦截到所有的符号条件的请求.
然后我的项目需求增加了,我在项目中加入了多重权限控制并希望用拦截器去控制它.假设现在有个功能,只开放给管理员,所以我把它的访问路径设为/user/manager/xxxx/xxxx.所以我又加入了一个拦截器,希望拦截路径中存在/manager/的所有的请求.我把path写为/manager/'**,结果却不行.
user的拦截器正常,但是manager的拦截器却不工作,我一度以为是拦截器出现了错误.然后经过一下午检查,我发现我把路径改成/manager/user/xxxx/xxxx就变成了manager拦截器工作但user拦截器不工作.我就确定是path出了问题.
在一次次修改尝试后,我明白了,原来/user/**只适用于以/user/开头的请求,/user/的前面什么都不能有,由于我所有的请求都是/user/开头,所以user的拦截器一直都是可以正常运行的,但是manager拦截器就不同了,我的path写为/manager/**,但是我所有带有/manager/的请求都是前面有/user/的,所以这不满足path路径中的/manager/**.当你要在这个名称的前面加其他的一个名称时,你需要/*/manager/**,如果前面有多个名称,就是/**/manager/**,当然了,由于/**是通配符,所以以manager开头的url也符合这个条件.
SpringMVC拦截器设置多个path
设置多个path
同一个拦截器如果想指定多个path,直接顺序添加多个<mvc:mapping path="" />即可:
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<!-- 如果不配置或/**,将拦截所有的Controller -->
<!-- 注意,匹配任意地址时注意是2个“*”号不是1个“*”号 -->
<mvc:interceptor>
<mvc:mapping path="/aaa/**" />
<mvc:mapping path="/bbb/**" />
<bean class="com.test.blog.interceptor.AccessInterceptor">
<property name="protectedUrls">
<list>
<value>edit</value>
<value>add</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
mybatis-plus 关于savebatch,saveorupdatebatch遇到的坑及解决办法
本文主要介绍了mybatis-plus 关于savebatch,saveorupdatebatch遇到的坑及解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-01-01
Maven介绍与配置+IDEA集成Maven+使用Maven命令小结
Maven是Apache软件基金会的一个开源项目,是一个优秀的项目构建管理工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作,本文给大家介绍Maven介绍与配置+IDEA集成Maven+使用Maven命令,感兴趣的朋友一起看看吧2024-01-01
Spring boot 自定义 Starter及自动配置的方法
Starter 组件是 Spring boot 的一个核心特性,Starter组件的出现极大的简化了项目开发,这篇文章主要介绍了Spring boot 自定义 Starter 及 自动配置,需要的朋友可以参考下2022-12-12


最新评论