拦截器
您可以注册拦截器以应用于传入请求,如下例所示
-
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 中配置相同的拦截器。 |