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拦截器类将处理请求。