В моем приложении мне нужно перехватить некоторый API. Моя rest api
обрабатывается org.springframework.web.servlet.handler.HandlerInterceptorAdapter
(HIA
). Чтобы получить более гибкий контроль над restTemplate
, я использую реализацию org.springframework.http.client.ClientHttpRequestInterceptor
(CHRI
). Оба в порядке и правильно. Но у меня есть проблема, потому что аналогичные функции должны управляться два раза, потому что CHRI
использует org.springframework.http.HttpRequest
, а HIA
использует javax.servlet.http.HttpServletRequest
.
Чтобы уменьшить дублирование и обходные пути, я хотел бы получить решение для любой из следующих проблем:
- как конвертировать
javax.servlet.http.HttpServletRequest
в org.springframework.http.HttpRequest
;
Существуют ли какие-либо инструменты для перехвата остальных вызовов с другим подходом к моему (я использовал HIA
реализацию CustomInterceptor
для настройки моей сети):
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private CustomInterceptor customInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(customInterceptor);
}
}
как внедрить HttpRequest
в HIA
реализацию?
@Component
@Slf4j
public class CustomInterceptor extends HandlerInterceptorAdapter {
// required injection!!!
// TODO this code part doesn't work
@Autowired
private ObjectFactory<HttpRequest> httpRequest;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("preHandle");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("postHandle");
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("afterCompletion");
super.afterCompletion(request, response, handler, ex);
}
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("afterConcurrentHandlingStarted");
super.afterConcurrentHandlingStarted(request, response, handler);
}
}