一、在 Spring 配置中创建一个过滤器,将 HttpServletRequest 包装为 ContentCachingRequestWrapper
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.util.ContentCachingRequestWrapper;
import java.io.IOException;
@Component
public class xxxxFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request);
filterChain.doFilter(wrappedRequest, response);
}
}
二、添加注解
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnotation {
String XXXX() default "";
}
三、添加切面
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class MyAspect {
@Around("logPointcut() && @annotation(logAnnotation)")
public Object around(ProceedingJoinPoint joinPoint, MyAnotation myAnotation ) throws Throwable {
// 获取当前 HttpServletRequest
HttpServletRequest request = getCurrentHttpRequest();
if (request != null) {
// 判断请求方法
if ("GET".equalsIgnoreCase(request.getMethod())) {
String paramName = request.getParameter("name");
System.out.println("GET 请求参数 name: " + paramName);
} else if ("POST".equalsIgnoreCase(request.getMethod())) {
String body = getRequestBody(request);
String paramName = getParamFromBody(body, "name");
System.out.println("POST 请求 body 参数 name: " + paramName);
}
}
return joinPoint.proceed();
}
// 获取当前 HttpServletRequest
private HttpServletRequest getCurrentHttpRequest() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return attributes != null ? attributes.getRequest() : null;
}
// 读取 POST 请求体内容
private String getRequestBody(HttpServletRequest request) {
StringBuilder body = new StringBuilder();
try (BufferedReader reader = request.getReader()) {
String line;
while ((line = reader.readLine()) != null) {
body.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return body.toString();
}
// 从 JSON 请求体中解析指定参数
private String getParamFromBody(String body, String paramName) {
JSONObject jsonObject = JSON.parseObject(body);
return jsonObject.getString(paramName);
}
}