对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

拦截器

在 Java 配置中,您可以注册拦截器以应用于传入的请求,如下例所示:spring-doc.cadn.net.cn

@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 中实现相同的配置:spring-doc.cadn.net.cn

<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。 若要在使用 MVC Java 配置时,在 Spring MVC 和其他框架的 HandlerMapping Bean 之间复用相同的拦截器, 可以将拦截器声明为 MappedInterceptor Bean(并且不要在 Java 配置中手动添加它们), 或者在 Java 配置和其他 HandlerMapping Bean 中分别配置相同的拦截器。