解决SpringMVC拦截器path路径的坑

编辑: admin 分类: java 发布时间: 2021-12-04 来源:互联网
目录
  • SpringMVC拦截器path路径的坑
  • SpringMVC拦截器设置多个path
    • 设置多个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>

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

【文章出处:美国cn2站群服务器 欢迎转载】