在到达控制器之前和离开控制器之后解密/加密有效负载

时间:2019-09-10 12:42:37

标签: java rest spring-boot filter

我的应用程序收到一个加密的有效负载,因此我必须解密该对象的每个值。之后,我必须用相同的格式加密有效负载并发送响应。

我需要的是一种在有效载荷到达控制器之前对其进行拦截的方法,该方法可以拦截并拦截对数据进行加密的响应。

我正在尝试使用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"
    }
}

1 个答案:

答案 0 :(得分:0)

如果您的应用程序使用Spring框架,则可以使用AOP(面向方面​​的程序设计)围绕过滤器定义一个方面,该方面将对数据进行解密,调用filter方法并拦截响应以对其进行重新加密。

https://docs.spring.io/spring/docs/2.5.x/reference/aop.html