Spring MVC 3,所有的拦截器都排除了一些定义的path

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

只是要清楚,我没有兴趣在一个定义的列表上应用拦截器。 我想定义那些排除。

谢谢!

自从Spring 3.2之后,他们在标签中join了这个特性

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> 

这里是文档的链接

对于基于java的configuration,从文档

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

configuration拦截器时,可以指定path模式。 拦截器将只被调用的path匹配拦截器path模式的控制器。

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

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

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

您可以在拦截器的@PostConstruct注释方法内部构build黑名单,并从属性文件中获取列入黑名单的path。

以前的答案是完美的,但想要给出一个快速的答案。

 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/customercarechatwindow"/> <bean class = "org.xyz.interceptors.officeHours"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/scheduleappointment"/> <bean class = "org.xyz.interceptors.Holiday"/> </mvc:interceptor> </mvc:interceptors> 

当带有url模式的请求是/customercarechatwindow那么officeHours拦截器类将处理请求。