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<String, String> params = getUrlParams(request);
|
try {
|
String requestUrl = request.getRequestURI();
|
Map<String, String> urlParams = getUrlParams(request);
|
Map<String, String> 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<String, String> 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<String, String> 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<String, String> 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;
|
}
|
}
|