You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

SystemLogAspect.java 7.6 kB

3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package com.stonedt.intelligence.aop;
  2. import java.lang.annotation.Annotation;
  3. import java.lang.reflect.Method;
  4. import java.net.InetAddress;
  5. import java.net.UnknownHostException;
  6. import javax.servlet.http.Cookie;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpSession;
  9. import org.aspectj.lang.JoinPoint;
  10. import org.aspectj.lang.annotation.Aspect;
  11. import org.aspectj.lang.annotation.Before;
  12. import org.aspectj.lang.annotation.Pointcut;
  13. import org.aspectj.lang.reflect.MethodSignature;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Component;
  16. import org.springframework.web.context.request.RequestAttributes;
  17. import org.springframework.web.context.request.RequestContextHolder;
  18. import org.springframework.web.context.request.ServletRequestAttributes;
  19. import com.alibaba.fastjson.JSON;
  20. import com.alibaba.fastjson.JSONObject;
  21. import com.stonedt.intelligence.entity.SysLog;
  22. import com.stonedt.intelligence.entity.SystemLogEntity;
  23. import com.stonedt.intelligence.entity.User;
  24. import com.stonedt.intelligence.service.SystemLogService;
  25. import com.stonedt.intelligence.service.UserService;
  26. import eu.bitwalker.useragentutils.UserAgent;
  27. import lombok.extern.slf4j.Slf4j;
  28. /**
  29. * @date 2019年11月27日 下午12:03:01
  30. * 王义
  31. */
  32. @Aspect
  33. @Component
  34. @SuppressWarnings("all")
  35. @Slf4j
  36. public class SystemLogAspect {
  37. @Autowired
  38. private SystemLogService systemLogService;
  39. @Autowired
  40. private UserService userService;
  41. @Pointcut("@annotation(com.stonedt.intelligence.aop.SystemControllerLog)")
  42. public void controllerAspect(){
  43. System.out.println("12121212121221");
  44. }
  45. /**
  46. * @Description 前置通知 ,用于拦截Controller层记录用户的操作
  47. */
  48. @Before("controllerAspect()")
  49. public void doBefore(JoinPoint joinPoint){
  50. System.out.println("进入拦截器----------");
  51. ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  52. HttpServletRequest request = servletRequestAttributes.getRequest();
  53. SysLog sysLog = new SysLog();
  54. MethodSignature signature = (MethodSignature) joinPoint.getSignature();
  55. Method method = signature.getMethod();
  56. System.out.println("拦截到了" + joinPoint.getSignature().getName() +"方法...");
  57. String loginIp = getIpAddr(request);
  58. String username = "";
  59. Integer id = null ;
  60. String signatrue_name = joinPoint.getSignature().getName();
  61. if(signatrue_name.equals("login")) {
  62. //String queryString = request.getQueryString();
  63. String telephone = request.getParameter("telephone");
  64. User selectUserByTelephone = userService.selectUserByTelephone(telephone);
  65. if(selectUserByTelephone!=null) {
  66. username = selectUserByTelephone.getUsername();
  67. id = selectUserByTelephone.getId();
  68. System.out.println("username:"+username);
  69. }
  70. }else {
  71. User use = (User)request.getSession().getAttribute("User");
  72. username = use.getUsername();
  73. id = use.getId();
  74. }
  75. UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
  76. String remark = joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName();
  77. SystemLogEntity systemlog = new SystemLogEntity();
  78. //log.info("浏览器:{}", userAgent.getBrowser().toString());
  79. systemlog.setUser_browser(userAgent.getBrowser().toString());
  80. //log.info("浏览器版本:{}", userAgent.getBrowserVersion());
  81. systemlog.setUser_browser_version(userAgent.getBrowserVersion().getVersion());
  82. // log.info("操作系统: {}", userAgent.getOperatingSystem().toString());
  83. systemlog.setOperatingSystem(userAgent.getOperatingSystem().toString());
  84. systemlog.setUser_id(id);
  85. systemlog.setUsername(username);
  86. systemlog.setLoginip(loginIp);
  87. try {
  88. SysLog controllerMethodDescription = getControllerMethodDescription(joinPoint);
  89. String module = controllerMethodDescription.getModule_name();
  90. System.out.println("module:"+module);
  91. systemlog.setModule(module);
  92. String type = controllerMethodDescription.getType();
  93. systemlog.setType(type);
  94. //子模块
  95. String submodule_name = controllerMethodDescription.getSubmodule_name();
  96. systemlog.setSubmodule(submodule_name);
  97. } catch (Exception e) {
  98. // TODO Auto-generated catch block
  99. e.printStackTrace();
  100. }
  101. systemLogService.addData(systemlog);
  102. }
  103. public static String getIpAddr(HttpServletRequest request) {
  104. String ipAddress = null;
  105. try {
  106. ipAddress = request.getHeader("x-forwarded-for");
  107. if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
  108. ipAddress = request.getHeader("Proxy-Client-IP");
  109. }
  110. if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
  111. ipAddress = request.getHeader("WL-Proxy-Client-IP");
  112. }
  113. if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
  114. ipAddress = request.getRemoteAddr();
  115. if ("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)) {
  116. // 根据网卡取本机配置的IP
  117. InetAddress inet = null;
  118. try {
  119. inet = InetAddress.getLocalHost();
  120. } catch (UnknownHostException e) {
  121. e.printStackTrace();
  122. }
  123. ipAddress = inet.getHostAddress();
  124. }
  125. }
  126. // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
  127. if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
  128. if (ipAddress.indexOf(",") > 0) {
  129. ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
  130. }
  131. }
  132. } catch (Exception e) {
  133. ipAddress = "";
  134. e.printStackTrace();
  135. }
  136. return ipAddress;
  137. }
  138. /**
  139. * @Description 获取注解中对方法的描述信息 用于Controller层注解
  140. */
  141. public static SysLog getControllerMethodDescription(JoinPoint joinPoint) throws Exception {
  142. SysLog sysLog = new SysLog();
  143. String targetName = joinPoint.getTarget().getClass().getName();
  144. String methodName = joinPoint.getSignature().getName();//目标方法名
  145. Object[] arguments = joinPoint.getArgs();
  146. Class targetClass = Class.forName(targetName);
  147. Method[] methods = targetClass.getMethods();
  148. for (Method method:methods) {
  149. if (method.getName().equals(methodName)){
  150. Class[] clazzs = method.getParameterTypes();
  151. if (clazzs.length == arguments.length){
  152. String module = method.getAnnotation(SystemControllerLog.class).module();
  153. String type = method.getAnnotation(SystemControllerLog.class).type();
  154. String submodule = method.getAnnotation(SystemControllerLog.class).submodule();
  155. sysLog.setModule_name(module);
  156. sysLog.setType(type);
  157. sysLog.setSubmodule_name(submodule);
  158. break;
  159. }
  160. }
  161. }
  162. return sysLog;
  163. }
  164. }

一款开源免费的舆情系统。 支持本地化部署,支持在线体验。 支持对海量舆情数据分析和挖掘。