拦截器
你可以注册拦截器以应用于传入的请求,如下例所示:
- 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,这些拦截器随后会被任何 HandlerMapping
Bean 检测到,包括来自其他框架的 HandlerMapping
Bean。相比之下,Java 配置仅将拦截器传递给它管理的 HandlerMapping
Bean。要在 Spring MVC 和其他框架的 HandlerMapping
Bean 之间重用相同的拦截器,可以通过 MVC Java 配置,要么声明 MappedInterceptor
Bean(并且不要在 Java 配置中手动添加它们),要么在 Java 配置和其他 HandlerMapping
Bean 中都配置相同的拦截器。