Spring MVC 3,所有拦截器,不包括一些定义的路径

Spring MVC 3, Interceptor on all excluding some defined paths

提问人:mjs 提问时间:3/28/2012 最后编辑:mjs 更新时间:5/11/2017 访问量:66154

问:

是否可以将拦截器应用于所有控制器和操作,但定义的某些控制器和操作除外?

需要明确的是,我对在定义的拦截器列表上应用拦截器不感兴趣。我想定义要排除的那些。

谢谢!

弹簧-MVC 拦截器

评论


答:

3赞 tbruyelle 3/29/2012 #1

配置拦截器时,可以指定路径模式。仅对路径与侦听器路径模式匹配的控制器调用拦截器。

编号: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-config-interceptor

但您可能已经注意到,路径模式不支持排除。

所以我认为唯一的方法是在拦截器内对路径进行编码。调用拦截器时,检索 并检查路径是否被列入黑名单。HttpServletRequest.getRequestURI()

例如,您可以在拦截器的带注释的方法中构建黑名单,从而从属性文件中获取列入黑名单的路径。@PostConstruct

评论

0赞 mjs 3/29/2012
是的,问题是确定控制器和动作的正确方法是什么,因为控制器映射理论上可以通过各种方式建立......Spring 知道在拦截器之后要触发的控制器是什么,因为处理程序对象是控制器实例。要正确地做到这一点,必须使用与弹簧相同的机制来查找它,以确定目标动作......任何一个??:)
0赞 tbruyelle 3/30/2012
Spring 用于确定正确控制器的机制依赖于注解。因此,对拦截器进行相同的操作意味着基本上用 .但这目前是不可能的。@RequestMapping@RequestMapping
67赞 gamerkore 4/12/2013 #2

从 Spring 3.2 开始,他们添加了带有标签的功能

mvc:exclude-mapping

请参阅 Spring 文档中的以下示例:

<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<mvc:interceptor>
    <mvc:mapping path="/**"/>
    <mvc:exclude-mapping path="/admin/**"/>
    <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
    <mvc:mapping path="/secure/*"/>
    <bean class="org.example.SecurityInterceptor" />
</mvc:interceptor>

这是文档的链接

25赞 Abdullah Khan 11/16/2015 #3

对于基于 java 的配置,来自文档

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleInterceptor());
        registry.addInterceptor(new ThemeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
        registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
    }

}

评论

1赞 Adrian 5/27/2018
其中 XML 等效项表示为: - 只是为了让其他人知道 SecurityInterceptor 不是 springframework 类。... <bean class="org.example.SecurityInterceptor"/> ...