拦截器

您可以注册拦截器以应用于传入请求,如下例所示

  • Java

  • Kotlin

  • Xml

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new LocaleChangeInterceptor());
	}
}
@Configuration
class WebConfiguration : WebMvcConfigurer {

	override fun addInterceptors(registry: InterceptorRegistry) {
		registry.addInterceptor(LocaleChangeInterceptor())
		registry.addInterceptor(ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**")
	}
}
<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:interceptors>
拦截器不适合作为安全层,因为可能与带注解的控制器路径匹配不符。通常,我们建议使用 Spring Security,或者使用与 Servlet 过滤器链集成的类似方法,并在尽可能早的时候应用。
XML 配置将拦截器声明为MappedInterceptor bean,而这些 bean 又会被任何HandlerMapping bean 检测到,包括来自其他框架的 bean。相比之下,Java 配置只将拦截器传递给它管理的HandlerMapping bean。要使用 MVC Java 配置在 Spring MVC 和其他框架HandlerMapping bean 中重用相同的拦截器,请声明MappedInterceptor bean(并且不要在 Java 配置中手动添加它们),或者在 Java 配置和其他HandlerMapping bean 中配置相同的拦截器。