gpt4 book ai didi

java - 使用 ContentCachingRequestWrapper 会导致空参数映射

转载 作者:行者123 更新时间:2023-11-30 06:45:15 27 4
gpt4 key购买 nike

我实现了一个过滤器,我想先读取请求的内容进行一些检查,然后再继续。

但问题是,在过滤器链的以下过滤器中,类 Request (org.eclipse.jetty.server.Request) 中的 getParameters() 方法被调用而不是 class ContentCachingRequestWrapper 中的 getParameters() 方法。所以 parametersMap 没有被填充并且总是空的。

这是我的代码的样子:

@Component
@Order(1)
public class EncodingFilter extends GenericFilterBean {

private static final Logger LOG =
LoggerFactory.getLogger(EncodingFilter.class);

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

final HttpServletRequest req = (HttpServletRequest) request;
HttpServletRequest servletRequest = new ContentCachingRequestWrapper(req);

String read = ByteSource.wrap(ByteStreams.toByteArray(servletRequest.getInputStream()))
.asCharSource(StandardCharsets.UTF_8).read();
// Doing analysis .....
// last step call filter chain
chain.doFilter(servletRequest, response);
}
}

在 Controller 中:

@PostMapping(
value = Endpoints.Janus.INIT,
produces = MediaType.TEXT_HTML_VALUE
)
public ModelAndView controller(
@RequestParam LinkedCaseInsensitiveMap<String> params,
HttpServletRequest servletRequest
) {
....
}

在 Controller 中,params Map 始终为空。如果我不在我的过滤器中调用 servletRequest.getInputStream(),params Map 就会被填充。

我正在使用 Spring Boot 1.5.6 和 Jetty 作为应用服务器

最佳答案

ContentCachingRequestWrapper 不是那样工作的,并且有一些限制。据我所知,只有 POST 请求和内容类型应该是 application/x-www-form-urlencoded。如果这适合您,那么您应该这样做:

final HttpServletRequest req = (HttpServletRequest) request;
HttpServletRequest servletRequest = new ContentCachingRequestWrapper(req);
servletRequest.getParameterMap(); // needed for caching!!

String read = ByteSource.wrap(servletRequest.getContentAsByteArray())
.asCharSource(StandardCharsets.UTF_8).read(); // Please note that we're not touching input stream!!

希望这对您有所帮助。

关于java - 使用 ContentCachingRequestWrapper 会导致空参数映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49250367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com