攔截器

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

  • 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。 若要在 Spring MVC 和其他框架 HandlerMapping Bean 中重複使用相同的攔截器以及 MVC Java 組態,請宣告 MappedInterceptor Bean (且不要在 Java 組態中手動新增它們),或在 Java 組態和其他 HandlerMapping Bean 中配置相同的攔截器。