通过springboot中ResponseBodyAdvice接口拦截URL以及返回data的拦截
package com.huaN.listener;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import com.alibaba.fastjson.JSONObject;
import com.huaN.entity.OperateLog;
import com.huaN.mapper.QualityMapper;
@ControllerAdvice
public class HnLogAnalysis implements ResponseBodyAdvice{
@Autowired
private QualityMapper qualityMapper;
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
//每次项目访问任何一个接口时都会被拦截到这来来
String requestPath = request.getURI().getPath();
String url = request.getURI().toString();
//获取指定访问接口的返回值
if(requestPath!=null){
//通过RequestContextHolder获取request
HttpServletRequest httpServletRequest =
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession httpSession = httpServletRequest.getSession(true);
httpSession.setAttribute("body", body);
String body1 = JSONObject.toJSON(body).toString();
// requestPath = () == null ? uri : (uri + "?" + ());
//("请求URl::: "+url);
//("返回值JSON::: "+body);
String usernum = getTelnum(url);
//("使用user::: "+usernum);
OperateLog log = new OperateLog();
String[] result = body1.toString().split(",");
try {
if(result.length>2) {
JSONObject json1 = JSONObject.parseObject(result[0]+"}");
log.setC_msg(json1.get("msg")!=null?json1.getString("msg"):"");
JSONObject json2 = JSONObject.parseObject("{"+result[1]+"}");
log.setC_code(json2.get("code")!=null?json2.getString("code"):"");
String a = body1.toString().substring(body1.toString().indexOf(result[2]), body1.toString().length()) ;
String aplus = "{"+a;
log.setC_data(aplus);
}
if(result.length==2) {
JSONObject json1 = JSONObject.parseObject(result[0]+"}");
log.setC_msg(json1.get("msg")!=null?json1.getString("msg"):"");
JSONObject json2 = JSONObject.parseObject("{"+result[1]);
log.setC_code(json2.get("code")!=null?json2.getString("code"):"");
}
} catch (Exception e) {
// TODO: handle exception
log.setC_code("500");
log.setC_msg("error");
}
log.setC_url(url);
URI newurl =null ;
try {
newurl = new URI(url);
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
log.setC_port(newurl.getPort()+"");
log.setC_hostIp(newurl.getHost());
log.setC_function(newurl.getPath());
log.setC_user(usernum);
if(!requestPath.contains("UrlList")) {
Integer i = qualityMapper.checkRepeatLog(log.getC_function());
if(i==0) {
qualityMapper.insertOperateLog(log);
}
}
return body;
}
return body;
}
//获取url中手机号(支持多个)
public String getTelnum(String sParam){
if(sParam.length()<=0)
return "";
Pattern pattern = Pattern.compile("(1|861)(3|5|8)\\d{9}$*");
Matcher matcher = pattern.matcher(sParam);
StringBuffer bf = new StringBuffer();
while (matcher.find()) {
bf.append(matcher.group()).append(",");
}
int len = bf.length();
if (len > 0) {
bf.deleteCharAt(len - 1);
}
return bf.toString();
}
@Override
public boolean supports(MethodParameter arg0, Class arg1) {
// TODO Auto-generated method stub
return true;
}
public static String getIP(String url) {
//使用正则表达式过滤,
String re = "((http|ftp|https)://)(([a-zA-Z0-9._-]+)|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}))(([a-zA-Z]{2,6})|(:[0-9]{1,4})?)";
String str = "";
// 编译正则表达式
Pattern pattern = Pattern.compile(re);
// 忽略大小写的写法
// Pattern pat = (regEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(url);
//若url==http://127.0.0.1:9040或的,正则表达式表示匹配
if (matcher.matches()) {
str = url;
} else {
String[] split2 = url.split(re);
if (split2.length > 1) {
String substring = url.substring(0, url.length() - split2[1].length());
str = substring;
} else {
str = split2[0];
}
}
return str;
}
private static URI getIP1(URI uri) {
URI effectiveURI = null;
try {
effectiveURI = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), null, null, null);
} catch (Throwable var4) {
effectiveURI = null;
}
return effectiveURI;
}
}
```java
在这里插入代码片