Spring MVC 3,拦截器都排除了一些定义的路径

时间:2012-03-28 13:04:20

标签: spring-mvc interceptor

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

为了清楚起见,我对在已定义的列表中应用拦截器不感兴趣。我想定义要排除的那些。

谢谢!

3 个答案:

答案 0 :(得分:66)

从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>

以下是文档的link

答案 1 :(得分:22)

对于基于java的配置,来自docs

@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/*");
    }

}

答案 2 :(得分:3)

配置拦截器时,可以指定路径模式。只有路径与拦截器路径模式匹配的控制器才会调用拦截器。

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

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

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

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