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