我的Spring Web应用程序是通过Java注释配置的(请参阅底部的配置类)。
是否有可能在一个控制器(或可能通过某种配置的许多控制器)的前面添加请求过滤器,该过滤器支持@RestController
方法中可用的相同(或至少子集)注释,例如例如@PathVariable
,@RequestParam
等?
到目前为止,我在HandlerInterceptor中找到了有关DispatcherServlet Interception docs接口的文档,并且按照Interceptors configuration中的内容配置了一个文档:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(ctx.getBean(CustomInterceptor.class));
}
但是拦截器实现了HandlerInterceptor
接口,因此preHandle()
方法具有给定的签名:
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
我当然可以从参数中读取参数,标头值等,但是我想知道是否已经支持其他方法。
该过滤器显示在某种文档中(我使用的是Swagger和SpringFox)将是一个加分。
@EnableWebMvc
@Configuration
@EnableSwagger2
@ComponentScan(basePackages= { /* ... */ })
@PropertySource("classpath:config.properties")
public class WebappConfig implements WebMvcConfigurer {
@Autowired
private ApplicationContext ctx;
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// extra Jackson configuration
}
// see below for this method
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(ctx.getBean(CustomInterceptor.class));
}
}