package com.ruoyi.auth.fliter; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.utils.StringUtils; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; @Component @Log4j2 public class ParamsAuthFilter implements Filter { // 令牌自定义标识 //@Value("${token.header}") private String header = "Authorization"; @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; String requestUrl = request.getRequestURI(); String requestUrlUpperCase = requestUrl.toUpperCase(); if(requestUrlUpperCase.contains("EXPORT") ||requestUrlUpperCase.contains("IMPORTTEMPLATE") ){ filterChain.doFilter(request, response); return; } RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response); getRequestParams(wrapper); ResponseWrapper responseWrapper = new ResponseWrapper(response); filterChain.doFilter(wrapper, responseWrapper); // 返回的结果 String content = responseWrapper.getTextContent(); log.info("-------------------- Response Data ----------------------"); log.info(requestUrl + " -> " + content); response.getOutputStream().write(content.getBytes()); } private void getRequestParams(HttpServletRequest request){ Map params = getUrlParams(request); try { String requestUrl = request.getRequestURI(); Map urlParams = getUrlParams(request); Map bodyParams = getBodyParams(request); params.putAll(urlParams); params.putAll(bodyParams); log.info("-------------------- request header ----------------------"); log.info(header + " -> " + request.getHeader(header)); log.info("-------------------- request params ----------------------"); log.info(requestUrl + " -> " + JSONObject.toJSONString(params)); }catch (Exception e){ e.printStackTrace(); } } private Map getBodyParams(HttpServletRequest request) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream())); StringBuilder stringBuilder = new StringBuilder(); String buffer = ""; while((buffer = bufferedReader.readLine()) != null){ stringBuilder.append(buffer); } String requestBodyStr = stringBuilder.toString(); if(StringUtils.isNotBlank(requestBodyStr)){ return JSONObject.parseObject(stringBuilder.toString(), Map.class); } return new HashMap<>(); } private Map getUrlParams(HttpServletRequest request){ String queryParams = ""; try { queryParams = request.getQueryString(); if(StringUtils.isNotBlank(queryParams)) { queryParams = URLDecoder.decode(request.getQueryString(), "utf-8"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } Map result = new HashMap<>(); if(StringUtils.isNotBlank(queryParams)) { String[] spilt = queryParams.split("&"); for (String s : spilt) { int index = s.indexOf("="); result.put(s.substring(0, index), s.substring(index + 1)); } } return result; } }