拦截器

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

  • Java

  • Kotlin

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new LocaleChangeInterceptor());
		registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
	}
}
@Configuration
@EnableWebMvc
class WebConfig : WebMvcConfigurer {

	override fun addInterceptors(registry: InterceptorRegistry) {
		registry.addInterceptor(LocaleChangeInterceptor())
		registry.addInterceptor(ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**")
	}
}

以下示例演示如何在 XML 中实现相同的配置

<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,而这些拦截器又会被任何 HandlerMapping bean 检测到,包括来自其他框架的拦截器。相比之下,Java 配置仅将拦截器传递给它管理的 HandlerMapping bean。要使用 MVC Java 配置在 Spring MVC 和其他框架 HandlerMapping bean 中重新使用相同的拦截器,请声明 MappedInterceptor bean(不要在 Java 配置中手动添加它们),或在 Java 配置和在其他 HandlerMapping bean 中配置相同的拦截器。