攔截器

您可以註冊攔截器以應用於傳入請求,如下例所示

  • 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 中配置相同的攔截器。