【发布时间】:2019-12-22 07:36:55
【问题描述】:
我目前正在尝试合并HandlerInterceptorAdapter,但它没有被注册,并且将其与其他答案进行比较很困难,因为每个人都在使用不同的东西。而且我知道 WebMvcConfigureAdapter 已被弃用,某些版本控制超出了我对项目范围的控制范围,请参阅下面的使用规范。
有人可以提供一些关于将拦截器与 RestTemplate(不是 ClientHttpRequestInterceptor)结合的指导。
主要:
@SpringBootApplication
@EnableRetry
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder applicationBuilder) {
return applicationBuilder.sources(Application.class);
}
@Bean
private RestTemplate restTemplate(){
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("redacted", 8080));
SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
simpleClientHttpRequestFactory.setProxy(proxy);
simpleClientHttpRequestFactory.setOutputStreaming(false);
RestTemplate template = new RestTemplate();
template.setErrorHandler(new MyResponseErrorHandler());
return template;
}
}
拦截器:com.example.foo.config.request.interceptor
@Component
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("INTERCEPTED");
return super.preHandle(request, response, handler);
}
}
InterceptorConfig : com.example.foo.config.request.interceptor
@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {
@Bean
MyInterceptor myInterceptor() {
return new MyInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
super.addInterceptors(registry);
System.out.println("Adding interceptor");
registry.addInterceptor(myInterceptor());
}
}
“添加拦截器”确实被记录下来,所以我知道正在扫描配置。我只是无法记录任何拦截器逻辑。
使用:
- Spring Boot v1.5.15
- 春季版:4.3.18.RELEASE
【问题讨论】:
-
我认为问题与您启动
RestTemplate有关。请使用自动连线@Autowired private RestTemplate restTemplate;。甚至拦截器也应该是Autowired。我建议以这个项目为例github.com/Asatnin/SpringMicroservices/blob/… -
谢谢@TarunLalwani 我在问这个问题之前尝试了 AutoWiring,但这没关系,我也在我的服务中 AutoWire 其余模板。您的示例看起来与我的设置非常相似,但是您的拦截器使用了其余交换方法,所以这可能是关键。我会尝试更新你
标签: java spring interceptor resttemplate