欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

解决SpringMVC拦截器path路径的坑

程序员文章站 2022-06-26 17:36:20
目录springmvc拦截器path路径的坑springmvc拦截器设置多个path设置多个pathspringmvc拦截器path路径的坑springmvc提供了很方便的拦截器供我们开发使用。在配置...

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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。