mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
fix: openapi can't work #854
This commit is contained in:
parent
89e7ef8b40
commit
dd3a17275f
@ -1,15 +1,18 @@
|
||||
package tech.powerjob.server.config;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
import java.io.*;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 解决 HttpServletRequest 只能被读取一次的问题,方便全局日志 & 鉴权,切面提前读取数据
|
||||
* 在请求进入Servlet容器之前,先经过Filter的过滤器链。在请求进入Controller之前,先经过 HandlerInterceptor 的拦截器链。Filter 一定先于 HandlerInterceptor 执行
|
||||
* <a href="https://juejin.cn/post/6858037733776949262">解决HttpServletRequest 流数据不可重复读</a>
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2024/2/11
|
||||
@ -17,15 +20,27 @@ import java.io.*;
|
||||
@Component
|
||||
public class CachingRequestBodyFilter implements Filter {
|
||||
|
||||
|
||||
/**
|
||||
* 忽略部分不需要处理的类型:
|
||||
* GET 请求的数据一般是 Query String,直接在 url 的后面,不需要特殊处理
|
||||
* multipart/form-data:doDispatch() 阶段就会进行处理,此处已经空值了,强行处理会导致结果空
|
||||
* application/x-www-form-urlencoded:估计也类似,有特殊逻辑,导致 OpenAPI 部分请求参数无法传递,同样忽略
|
||||
*/
|
||||
private static final Set<String> IGNORE_CONTENT_TYPES = Sets.newHashSet("application/x-www-form-urlencoded", "multipart/form-data");
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
|
||||
throws IOException, ServletException {
|
||||
if (request instanceof HttpServletRequest) {
|
||||
CustomHttpServletRequestWrapper wrappedRequest = new CustomHttpServletRequestWrapper((HttpServletRequest) request);
|
||||
chain.doFilter(wrappedRequest, response);
|
||||
} else {
|
||||
chain.doFilter(request, response);
|
||||
String contentType = request.getContentType();
|
||||
if (contentType != null && !IGNORE_CONTENT_TYPES.contains(contentType)) {
|
||||
CustomHttpServletRequestWrapper wrappedRequest = new CustomHttpServletRequestWrapper((HttpServletRequest) request);
|
||||
chain.doFilter(wrappedRequest, response);
|
||||
return;
|
||||
}
|
||||
}
|
||||
chain.doFilter(request, response);
|
||||
}
|
||||
|
||||
// Implement other required methods like init() and destroy() if necessary
|
||||
|
Loading…
x
Reference in New Issue
Block a user