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;
|
package tech.powerjob.server.config;
|
||||||
|
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.servlet.*;
|
import javax.servlet.*;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletRequestWrapper;
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解决 HttpServletRequest 只能被读取一次的问题,方便全局日志 & 鉴权,切面提前读取数据
|
* 解决 HttpServletRequest 只能被读取一次的问题,方便全局日志 & 鉴权,切面提前读取数据
|
||||||
* 在请求进入Servlet容器之前,先经过Filter的过滤器链。在请求进入Controller之前,先经过 HandlerInterceptor 的拦截器链。Filter 一定先于 HandlerInterceptor 执行
|
* 在请求进入Servlet容器之前,先经过Filter的过滤器链。在请求进入Controller之前,先经过 HandlerInterceptor 的拦截器链。Filter 一定先于 HandlerInterceptor 执行
|
||||||
|
* <a href="https://juejin.cn/post/6858037733776949262">解决HttpServletRequest 流数据不可重复读</a>
|
||||||
*
|
*
|
||||||
* @author tjq
|
* @author tjq
|
||||||
* @since 2024/2/11
|
* @since 2024/2/11
|
||||||
@ -17,15 +20,27 @@ import java.io.*;
|
|||||||
@Component
|
@Component
|
||||||
public class CachingRequestBodyFilter implements Filter {
|
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
|
@Override
|
||||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
|
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
|
||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
if (request instanceof HttpServletRequest) {
|
if (request instanceof HttpServletRequest) {
|
||||||
CustomHttpServletRequestWrapper wrappedRequest = new CustomHttpServletRequestWrapper((HttpServletRequest) request);
|
String contentType = request.getContentType();
|
||||||
chain.doFilter(wrappedRequest, response);
|
if (contentType != null && !IGNORE_CONTENT_TYPES.contains(contentType)) {
|
||||||
} else {
|
CustomHttpServletRequestWrapper wrappedRequest = new CustomHttpServletRequestWrapper((HttpServletRequest) request);
|
||||||
chain.doFilter(request, response);
|
chain.doFilter(wrappedRequest, response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
chain.doFilter(request, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implement other required methods like init() and destroy() if necessary
|
// Implement other required methods like init() and destroy() if necessary
|
||||||
|
Loading…
x
Reference in New Issue
Block a user