Spring boot 使用Spring引导转发HTTP请求
我正在实现一个“验证”服务,我想验证以下HTTP请求属性:Spring boot 使用Spring引导转发HTTP请求,spring-boot,interceptor,Spring Boot,Interceptor,我正在实现一个“验证”服务,我想验证以下HTTP请求属性: 请求头 请求主体 查询参数 URL参数 验证上述属性后,我需要将相同的请求转发给具有完全相同URL的下游服务(包括根上下文和所有其余的头、查询参数和URL参数属性) 我已尝试使用Rest控制器实现此功能: @RequestMapping(value= "/**") public String validate( @RequestParam Map<String,String> requestPar
- 请求头
- 请求主体
- 查询参数
- URL参数
@RequestMapping(value= "/**")
public String validate(
@RequestParam Map<String,String> requestParameters,
@RequestHeader HttpHeaders headers,
HttpServletRequest request) {
// validate headers
// validate body
// validate URL parameters
// validate query parameters
forwardRequest()
}
@RequestMapping(value=“/**”)
公共字符串验证(
@RequestParam映射requestParameters,
@RequestHeader HttpHeaders标头,
HttpServletRequest(请求){
//验证标题
//验证体
//验证URL参数
//验证查询参数
转发请求()
}
在实现forwardRequest的过程中,我尝试使用restTemplate并设置所有属性并进行exchange()调用。然而,我认为必须有一种更好的方法来按原样转发请求,而不必使用RestTemplate手工制作请求。
有什么建议吗?我想你忽略了一个事实,那就是有一个叫做
HandlerInterceptor
的概念
步骤1:
public class ValidationInterceptor extends HandlerInterceptorAdapter {
private static final Log logger = LogFactory.getLog(ValidationInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// validate headers
// validate body
// validate URL parameters
// validate query parameters
return true;//forwardRequest(); False will break the chain.
}
}
步骤2:
@Configuration
public class InterceptorsConfig implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ValidationInterceptor())
.addPathPatterns("/*", "/*.html");//Add as many as patterns you want this validator to be called!
}
}
我知道有拦截器。这仍然不能解决在不手工制作整个HTTP请求的情况下将请求“转发”到上游系统的问题。请记住,上游系统位于不同的网络层,我将无法在上游应用程序中添加验证侦听器。您的意思是说您正在代理请求吗?是的,基于验证,我必须拒绝或转发/代理请求。您找到解决方案了吗?看看netflix的Zuul