|  | @ -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;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | }
 |