|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- package com.stonedt.intelligence.aop;
-
- import java.lang.annotation.Annotation;
- import java.lang.reflect.Method;
- import java.net.InetAddress;
- import java.net.UnknownHostException;
-
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpSession;
-
- import org.aspectj.lang.JoinPoint;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Before;
- import org.aspectj.lang.annotation.Pointcut;
- import org.aspectj.lang.reflect.MethodSignature;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import org.springframework.web.context.request.RequestAttributes;
- import org.springframework.web.context.request.RequestContextHolder;
- import org.springframework.web.context.request.ServletRequestAttributes;
-
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.stonedt.intelligence.entity.SysLog;
- import com.stonedt.intelligence.entity.SystemLogEntity;
- import com.stonedt.intelligence.entity.User;
- import com.stonedt.intelligence.service.SystemLogService;
- import com.stonedt.intelligence.service.UserService;
-
- import eu.bitwalker.useragentutils.UserAgent;
- import lombok.extern.slf4j.Slf4j;
-
- /**
- * @date 2019年11月27日 下午12:03:01
- * 王义
- */
- @Aspect
- @Component
- @SuppressWarnings("all")
- @Slf4j
-
- public class SystemLogAspect {
- @Autowired
- private SystemLogService systemLogService;
-
- @Autowired
- private UserService userService;
-
-
-
-
-
-
-
-
-
-
-
- @Pointcut("@annotation(com.stonedt.intelligence.aop.SystemControllerLog)")
- public void controllerAspect(){
- System.out.println("12121212121221");
- }
-
- /**
- * @Description 前置通知 ,用于拦截Controller层记录用户的操作
- */
- @Before("controllerAspect()")
- public void doBefore(JoinPoint joinPoint){
- System.out.println("进入拦截器----------");
- ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
- HttpServletRequest request = servletRequestAttributes.getRequest();
- SysLog sysLog = new SysLog();
- MethodSignature signature = (MethodSignature) joinPoint.getSignature();
- Method method = signature.getMethod();
- System.out.println("拦截到了" + joinPoint.getSignature().getName() +"方法...");
-
- String loginIp = getIpAddr(request);
-
- String username = "";
- Integer id = null ;
- String signatrue_name = joinPoint.getSignature().getName();
- if(signatrue_name.equals("login")) {
- //String queryString = request.getQueryString();
- String telephone = request.getParameter("telephone");
- User selectUserByTelephone = userService.selectUserByTelephone(telephone);
- if(selectUserByTelephone!=null) {
- username = selectUserByTelephone.getUsername();
- id = selectUserByTelephone.getId();
- System.out.println("username:"+username);
- }
-
- }else {
- User use = (User)request.getSession().getAttribute("User");
- username = use.getUsername();
- id = use.getId();
- }
-
-
-
-
- UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
- String remark = joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName();
-
- SystemLogEntity systemlog = new SystemLogEntity();
- //log.info("浏览器:{}", userAgent.getBrowser().toString());
- systemlog.setUser_browser(userAgent.getBrowser().toString());
- //log.info("浏览器版本:{}", userAgent.getBrowserVersion());
-
- systemlog.setUser_browser_version(userAgent.getBrowserVersion().getVersion());
- // log.info("操作系统: {}", userAgent.getOperatingSystem().toString());
- systemlog.setOperatingSystem(userAgent.getOperatingSystem().toString());
- systemlog.setUser_id(id);
- systemlog.setUsername(username);
- systemlog.setLoginip(loginIp);
- try {
- SysLog controllerMethodDescription = getControllerMethodDescription(joinPoint);
- String module = controllerMethodDescription.getModule_name();
- System.out.println("module:"+module);
- systemlog.setModule(module);
- String type = controllerMethodDescription.getType();
- systemlog.setType(type);
-
- //子模块
- String submodule_name = controllerMethodDescription.getSubmodule_name();
- systemlog.setSubmodule(submodule_name);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- systemLogService.addData(systemlog);
-
-
-
-
-
-
- }
-
- public static String getIpAddr(HttpServletRequest request) {
- String ipAddress = null;
- try {
- ipAddress = request.getHeader("x-forwarded-for");
- if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
- ipAddress = request.getHeader("Proxy-Client-IP");
- }
- if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
- ipAddress = request.getHeader("WL-Proxy-Client-IP");
- }
- if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
- ipAddress = request.getRemoteAddr();
- if ("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)) {
- // 根据网卡取本机配置的IP
- InetAddress inet = null;
- try {
- inet = InetAddress.getLocalHost();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- }
- ipAddress = inet.getHostAddress();
- }
- }
- // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
- if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
- if (ipAddress.indexOf(",") > 0) {
- ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
- }
- }
- } catch (Exception e) {
- ipAddress = "";
- e.printStackTrace();
- }
- return ipAddress;
- }
-
- /**
- * @Description 获取注解中对方法的描述信息 用于Controller层注解
- */
- public static SysLog getControllerMethodDescription(JoinPoint joinPoint) throws Exception {
- SysLog sysLog = new SysLog();
- String targetName = joinPoint.getTarget().getClass().getName();
- String methodName = joinPoint.getSignature().getName();//目标方法名
- Object[] arguments = joinPoint.getArgs();
- Class targetClass = Class.forName(targetName);
- Method[] methods = targetClass.getMethods();
- for (Method method:methods) {
- if (method.getName().equals(methodName)){
- Class[] clazzs = method.getParameterTypes();
- if (clazzs.length == arguments.length){
- String module = method.getAnnotation(SystemControllerLog.class).module();
- String type = method.getAnnotation(SystemControllerLog.class).type();
-
- String submodule = method.getAnnotation(SystemControllerLog.class).submodule();
-
- sysLog.setModule_name(module);
- sysLog.setType(type);
-
- sysLog.setSubmodule_name(submodule);
- break;
- }
- }
- }
- return sysLog;
- }
- }
|