【发布时间】:2019-09-10 12:42:37
【问题描述】:
我的应用程序收到一个加密的有效负载,我必须解密该对象的每个值。之后,我必须以相同的格式加密有效载荷并发送响应。
我需要的是一种在有效载荷到达控制器之前拦截有效载荷以解密和拦截响应以加密数据的方法。
我正在尝试使用 javax.servlet 的过滤器,但我不知道如何获取主体、更改其值并将其设置回来。
我已经尝试过拦截器,但我在更改请求正文时遇到了同样的问题。
@Component
@Order(1)
public class CryptoFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
// code to decrypt request body goes here
filterChain.doFilter(request, response);
// code to encrypt response body goes here
}
}
请求正文是这样的:
{
"key1": "098f6bcd4621d373cade4e832627b4f6",
"key2": "098f6bcd4621d373cade4e832627b4f6",
"key3": {
"key4": "098f6bcd4621d373cade4e832627b4f6"
}
}
过滤后我需要在控制器上使用这个:
{
"key1": "decrypted",
"key2": "decrypted",
"key3": {
"key4": "decrypted"
}
}
【问题讨论】:
-
这有助于更好地理解。我找到了this question,这种方法奏效了。我正在使用 ControllerAdvice 在对象到达控制器之前获取对象,然后当我们多次读取 InputStrem 时,我没有抛出 IllegalStateException,这在使用过滤器时发生
标签: java rest spring-boot filter