可以根据需要改写。1、异常配置类统一拦截(日志类在jar包报错,自行替换)。导入com.sun.org.apache.xml.internal.security.Init;导入org.springframework.web.bind.annotation.ExceptionHandler;导入org.springframework.web.bind.annotation.RestControllerAdvice;导入javax.servlet.http。HttpServletRequest;/***@author:ZhangXiaoHui*@description:统一异常截截*@create:2021/11/2315:21*/@RestControllerAdvicepublicclassBaseExceptionHandler{privatestaticfinalcom.sun.org.slf4j.internal.LoggerLOG=com.sun.org.slf4j.internal.LoggerFactory.getLogger(Init.class);/***所有异常*@parame异常*@return结果*/@ExceptionHandler(Exception.class)publicStringhandleException(Exceptione){HttpServletRequestrequest=WebHttpUtil.getRequest();LOG.error(e.getMessage(),e);if(request!=null){Stringheader=WebHttpUtil.parseRequestHeaders(request);字符串参数=WebHttpUtil.parseParams(请求);字符串正文=WebHttpUtil.parseBodyParams(req客户);字符串ip=WebHttpUtil.getIP(请求);LOG.error("错误接口请求信息:\n"+"请求ip:["+ip+"]\n"+"请求头:["+header+"]\n"+"请求头参数:["+param+"]\n"+"请求体参数:["+body+"]\n");}LOG.error(e.getMessage(),e);返回“系统异常”;}}2.解决HttpServletRequest的输入流只能读取一次导入org.springframework.stereotype.Component;导入javax.servlet.Filter;导入javax.servlet.FilterChain;导入javax.servlet.FilterConfig;导入javax.servlet.ReadListener;导入javax.servlet.ServletException;导入javax.servlet.ServletInputStream;导入javax.servlet.ServletRequest;导入javax.servlet.ServletResponse;导入javax.servlet.annotation.WebFilter;导入javax.servlet.http.HttpServletRequest;导入javax.servlet.http.HttpServletRequestWrapper;导入java.io.BufferedReader;导入java.io.ByteArrayInputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.nio.charset.StandardCharsets;/***@author:ZhangXiaoHui*@description:*@create:2022/9/910:45*/@Component@WebFilter(filterName="HttpServletRequestFilter",urlPatterns="/")公共类HttpServletRequestFilter实现过滤器{@Overridepublicvoidinit(FilterConfigfilterConfig){}@OverridepublicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)抛出IOException,ServletException{ServletRequestrequestWrapper=null;如果(servletRequestinstanceofHttpServletRequest){requestWrapper=newRequestWrapper((HttpServletRequest)servletRequest);}//获取请求中的流如何,将提取出来的字符串再次转换成流,放入新的请求对象中}else{filterChain.doFilter(requestWrapper,servletResponse);}}@Overridepublicvoiddestroy(){}/****HttpServletRequestwrapper*解决:request.getInputStream()只能读取一次*目标:stream可以重复读取*/publicstaticclassRequestWrapperextendsHttpServletRequestWrapper{/***请求体*/privatefinalStringbody;publicRequestWrapper(HttpServletRequest请求){super(要求);//存储正文数据this.body=getBody(request);}/***获取请求体**@paramrequestrequest*@return请求体*/privateStringgetBody(HttpServletRequestrequest){returnWebHttpUtil.parseBodyParams(request);}@OverridepublicBufferedReadergetReader(){返回新的BufferedReader(newInputStreamReader(getInputStream()));}@OverridepublicServletInputStreamgetInputStream(){//创建字节数组输入流finalByteArrayInputStreamnewbyteStrrayByteArrayInputStream(body.getBytes(StandardCharsets.UTF_8));返回新的ServletInputStream(){@OverridepublicbooleanisFinished(){返回假;}@OverridepublicbooleanisReady(){返回false;}@OverridepublicvoidsetReadListener(ReadListenerreadListener){}@Overridepublicintread(){returnbyteArrayInputStream.read();}};}}}3.Http工具类importcn.hutool.core.util.StrUtil;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;importjavax.servlet。http.HttpServletRequest;导入java.io.BufferedReader;导入java.io.IOException;导入java.io.InputStream;导入java.io.InputStreamReader;导入java.nio.charset.StandardCharsets;导入java.util.Enumeration;/***web工具类**@author晓辉*/publicclassWebHttpUtil{/***返回请求端的IP地址*/publicstaticStringgetIP(HttpServletRequestrequest){Stringip=request.getHeader("x-forwarded-for");ip=checkIp(ip)?ip:(checkIp(我p=request.getHeader("代理-客户端-IP"))?ip:(checkIp(ip=request.getHeader("WL-Proxy-Client-IP"))?ip:request.getRemoteAddr()));返回"0:0:0:0:0:0:0:1".equals(ip)?“127.0.0.1”:IP;}privatestaticbooleancheckIp(Stringip){return!StrUtil.isEmpty(ip)&&!"unknown".equalsIgnoreCase(ip);}publicstaticHttpServletRequestgetRequest(){ServletRequestAttributesservletRequestAttributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();如果(servletRequestAttributes==null){返回null;}else{返回servletRequestAttributes.getRequest();}}/***获取get请求信息*@paramrequest请求*@return结果*/publicstaticStringparseParams(HttpServletRequestrequest){StringBuilderstringBuilder=new字符串生成器();Enumeration
