解决SpringMVC * path路径的坑
作者:Aoess丶 时间:2023-03-24 17:02:01
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>
来源:https://blog.csdn.net/yan245294305/article/details/82775641