|
@ -0,0 +1,88 @@
|
|
|
package com.yihu.jw.gateway.methlog;
|
|
|
|
|
|
import com.yihu.jw.gateway.log.dao.*;
|
|
|
import com.yihu.jw.gateway.log.entity.*;
|
|
|
import com.yihu.jw.gateway.useragent.UserAgent;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.net.InetAddress;
|
|
|
import java.net.UnknownHostException;
|
|
|
import java.util.Date;
|
|
|
|
|
|
/**
|
|
|
* Created by Trick on 2020/2/19.
|
|
|
*/
|
|
|
@Service
|
|
|
@Transactional
|
|
|
public class BaseMethodLogService {
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(com.yihu.jw.gateway.log.service.BaseMethodLogService.class);
|
|
|
|
|
|
@Autowired
|
|
|
private com.yihu.jw.gateway.log.dao.BaseMethodLogDao baseMethodLogDao;
|
|
|
|
|
|
@Autowired
|
|
|
private UserAgent userAgent;
|
|
|
|
|
|
/**
|
|
|
* 存储操作日志
|
|
|
*/
|
|
|
public void saveMethodLog(HttpServletRequest request){
|
|
|
try{
|
|
|
logger.info("saveMethodLog");
|
|
|
com.yihu.jw.gateway.log.entity.BaseMethodLogDO log = new com.yihu.jw.gateway.log.entity.BaseMethodLogDO();
|
|
|
log.setUuid(userAgent.getUID());
|
|
|
log.setName(userAgent.getUNAME());
|
|
|
log.setIp(getIpAddress(request));
|
|
|
log.setCreateTime(new Date());
|
|
|
log.setMethod(request.getRequestURI());
|
|
|
baseMethodLogDao.save(log);
|
|
|
logger.info("saveMethodLog success");
|
|
|
}catch (Exception e){
|
|
|
logger.info("saveMethodLog error"+e.toString());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址。
|
|
|
* 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
|
|
|
* 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串
|
|
|
* @param request
|
|
|
* @return
|
|
|
*/
|
|
|
private String getIpAddress(HttpServletRequest request) {
|
|
|
String ip = request.getHeader("x-forwarded-for");
|
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
ip = request.getHeader("Proxy-Client-IP");
|
|
|
}
|
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
ip = request.getHeader("WL-Proxy-Client-IP");
|
|
|
}
|
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
ip = request.getHeader("HTTP_CLIENT_IP");
|
|
|
}
|
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
|
|
|
}
|
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
|
|
ip = request.getRemoteAddr();
|
|
|
if("127.0.0.1".equals(ip)||"0:0:0:0:0:0:0:1".equals(ip)){
|
|
|
//根据网卡取本机配置的IP
|
|
|
InetAddress inet=null;
|
|
|
try {
|
|
|
inet = InetAddress.getLocalHost();
|
|
|
} catch (UnknownHostException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
ip= inet.getHostAddress();
|
|
|
}
|
|
|
}
|
|
|
return ip;
|
|
|
}
|
|
|
|
|
|
}
|