我正在使用Spring MessageConverter在请求转移到实际REST API之前加密/解密传入/传出消息。但是,我需要根据调用的REST API方法执行此操作。
1)我们可以在MessageConverters中以某种方式访问请求对象,以便我可以绕过readFromSource()和writeToResult()方法中的一些代码吗?
2)或者是否可以根据请求属性调用新的MessageConverter?
答案 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之前对其进行解密,并在发送响应时进行加密