在Spring MessageConverters中访问请求对象?

时间:2018-02-19 09:10:40

标签: java spring spring-mvc request converter

我正在使用Spring MessageConverter在请求转移到实际REST API之前加密/解密传入/传出消息。但是,我需要根据调用的REST API方法执行此操作。

1)我们可以在MessageConverters中以某种方式访问​​请求对象,以便我可以绕过readFromSource()和writeToResult()方法中的一些代码吗?

2)或者是否可以根据请求属性调用新的MessageConverter?

1 个答案:

答案 0 :(得分:0)

您不必修改提供的HttpMessageConverters来修改请求或响应。您可以使用带有RestTemplate的ClientHttpRequestInterceptor。

这可以在将请求分派给REST API之前拦截该请求。例如

public class EncryptingClientHttpRequestInterceptor implements ClientHttpRequestInterceptor{

  public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
            throws IOException{
body[] encrypted = encrypt(body); //encrypt method define the encryption logic
return execution.execute(request, encrypted);
}

然后使用RestTemplate注册拦截器

@Bean
public RestTemplate restTemplate(){
   RestTemplate instance = new RestTemplate();
   instance.getInterceptors().add(new EncryptingClientHttpRequestInterceptor());
}

在服务器端,您可以使用HandlerInterceptor策略在请求到达RequestMappingHandlerAdapter之前对其进行解密,并在发送响应时进行加密