拦截器

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

  • 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 检测到,包括来自其他框架的。相比之下,Java 配置只将其管理的拦截器传递给它管理的 HandlerMapping Bean。要在 Spring MVC 和其他框架的 HandlerMapping Bean 中通过 MVC Java 配置重用相同的拦截器,可以声明 MappedInterceptor Bean(并且不要在 Java 配置中手动添加它们),或者在 Java 配置和其他 HandlerMapping Bean 中配置相同的拦截器。