Java 在Spring筛选器中更改HttpServletRequest的后体

Java 在Spring筛选器中更改HttpServletRequest的后体,java,spring,filter,Java,Spring,Filter,我有一个弹簧过滤器: public class MyFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { } } 现在,如果这个请求是一个POST,我想

我有一个弹簧过滤器:

  public class MyFilter implements Filter {

      public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {

       }
  }

现在,如果这个请求是一个POST,我想在它到达我的控制器之前写入/修改请求的POST主体。我有办法做到这一点吗?我环顾四周,找到了大量关于如何阅读正文的信息,但没有写

还有一个选项,但不知道它是否符合您的要求。 也许它能帮你。下面的方法是使用SpringAspectJ。 根据需要对以下代码进行更改

@Component
@Aspect
public class WebServiceAPILoggingAspect {

    private static Logger logger = Logger.getLogger(WebServiceAPILoggingAspect.class);

    @Before("execution(* com.progress.d2c.web.service.*.controller.*.*(..))")
    public Object controllerMethodsAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
        Object proceedResponse = null;
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        String payload = IOUtils.toString(request.getInputStream(), "UTF-8");
        // Now write your code...
        try {
            proceedResponse = joinPoint.proceed();
        } catch (Exception e) {
            logger.error("Failed to complete the operation.");
            throw e;
        }
        return proceedResponse;
    }
}

还有一个选择,但不知道它是否符合您的要求。 也许它能帮你。下面的方法是使用SpringAspectJ。 根据需要对以下代码进行更改

@Component
@Aspect
public class WebServiceAPILoggingAspect {

    private static Logger logger = Logger.getLogger(WebServiceAPILoggingAspect.class);

    @Before("execution(* com.progress.d2c.web.service.*.controller.*.*(..))")
    public Object controllerMethodsAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
        Object proceedResponse = null;
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        String payload = IOUtils.toString(request.getInputStream(), "UTF-8");
        // Now write your code...
        try {
            proceedResponse = joinPoint.proceed();
        } catch (Exception e) {
            logger.error("Failed to complete the operation.");
            throw e;
        }
        return proceedResponse;
    }
}

这是不可能的,为什么要更改请求正文?这是不可能的,为什么要更改请求正文?