【问题标题】:How to modify and set the post request body using servlet filter如何使用 servlet 过滤器修改和设置 post 请求正文
【发布时间】:2018-12-30 20:09:00
【问题描述】:

我想对 JSON 请求和响应进行一些加密/解密。为此我选择了 servlet 过滤器。但是,我不知道如何修改和设置 json 请求正文。 任何解决方案都非常值得赞赏。

【问题讨论】:

  • 您使用的是 jersey 还是任何其他 jax-rs 实现?
  • 不,我正在使用 springBoot

标签: java spring servlets jakarta-ee servlet-filters


【解决方案1】:

您必须使用包装器:

private static class MyRequestWrapper extends HttpServletRequestWrapper {
    private ServletInputStream input;

    public MyRequestWrapper(ServletRequest request) {
        super((HttpServletRequest)request);
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
        if (input == null) {
            input = new InputStreamDecoder(super.getInputStream());
        }
        return input;
    }
}

private static class MyResponseWrapper extends HttpServletResponseWrapper {
    private ServletOutputStream output;

    public MyResponseWrapper(ServletResponse response) {
        super((HttpServletResponse)response);
    }

    @Override
    public ServletOutputStream getOutputStream() throws IOException {
        if (output == null) {
            output = new OutputStreamEncoder(super.getOutputStream());
        }
        return output;
    }

    public void close() throws IOException {
        if (output != null) {
            output.flush();
        }
    }
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {
    MyRequestWrapper req = new MyRequestWrapper(request);
    MyResponseWrapper res = new MyResponseWrapper(response);
    chain.doFilter(req, res);
    res.close();
}

【讨论】:

  • 谢谢@Maurice。对于 OutputStreamEncoder 和 InputStreamDecoder 我需要导入哪个 jar。
  • @RathanaKumar 这是标准的 servlet API
猜你喜欢
  • 2010-11-27
  • 2011-03-15
  • 2016-03-13
  • 1970-01-01
  • 2021-07-29
  • 2017-02-21
  • 2016-12-01
  • 2016-11-19
  • 1970-01-01
相关资源
最近更新 更多