Spring mvc 如何在spring mvc中获取过滤器外部的字符串

Spring mvc 如何在spring mvc中获取过滤器外部的字符串,spring-mvc,servlets,servlet-filters,Spring Mvc,Servlets,Servlet Filters,当我运行它时,我会以正确的格式获取原始请求字符串,但是当我尝试在doFilter方法之外的任何地方获取此原始请求时,它会返回null 是否有一种方法可以在doFilter方法之外获取此字符串。我尝试将此字符串传递给一个新方法,但没有任何效果。一个简单的解决方案是将刚刚读取的原始请求字符串添加到ServletRequest属性中: @Override public void doFilter(ServletRequest req, ServletResponse res, FilterCh

当我运行它时,我会以正确的格式获取原始请求字符串,但是当我尝试在doFilter方法之外的任何地方获取此原始请求时,它会返回null


是否有一种方法可以在doFilter方法之外获取此字符串。我尝试将此字符串传递给一个新方法,但没有任何效果。

一个简单的解决方案是将刚刚读取的原始请求字符串添加到ServletRequest属性中:

@Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        StringWriter writer = new StringWriter();
        IOUtils.copy(request.getInputStream(), writer, "UTF-8");
        rawRequest = writer.toString();

        System.out.println("raw Request   :" + rawRequest);

        chain.doFilter(req, res);

    }
然后,您可以将其恢复到您有权访问请求对象的任何位置:

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) req;
    StringWriter writer = new StringWriter();
    IOUtils.copy(request.getInputStream(), writer, "UTF-8");
    rawRequest = writer.toString();

    System.out.println("raw Request   :" + rawRequest);

    req.setAttribute("rawRequest", rawRequest);

    chain.doFilter(req, res);
}

将其传递给新方法是什么意思?显示更多代码。。
String rawRequest = (String)req.getAttribute("rawRequest");