Просмотр исходного кода

管理后台-操作日志列表

dengsixing 3 лет назад
Родитель
Сommit
e1eeb41c37

+ 183 - 185
4dkankan-center-manage/src/main/java/com/fdkankan/manage/interceptor/VisitLogInterceptor.java

@@ -1,185 +1,183 @@
-//package com.fdkankan.manage.interceptor;
-//
-//import cn.hutool.core.util.StrUtil;
-//import cn.hutool.extra.servlet.ServletUtil;
-//import cn.hutool.http.ContentType;
-//import cn.hutool.http.useragent.UserAgent;
-//import cn.hutool.http.useragent.UserAgentUtil;
-//import com.alibaba.fastjson.JSON;
-//import com.alibaba.fastjson.JSONObject;
-//import com.fdkankan.common.util.JwtUtil;
-//import com.fdkankan.manage.bean.MenuBean;
-//import com.fdkankan.manage.entity.OperLog;
-//import com.fdkankan.redis.constant.RedisKey;
-//import com.fdkankan.redis.util.RedisUtil;
-//import io.jsonwebtoken.Claims;
-//import java.util.Arrays;
-//import java.util.Calendar;
-//import java.util.Date;
-//import java.util.HashMap;
-//import java.util.LinkedList;
-//import java.util.Map;
-//import java.util.Objects;
-//import javax.servlet.http.HttpServletRequest;
-//import lombok.extern.slf4j.Slf4j;
-//import org.aspectj.lang.JoinPoint;
-//import org.aspectj.lang.ProceedingJoinPoint;
-//import org.aspectj.lang.annotation.Around;
-//import org.aspectj.lang.annotation.Aspect;
-//import org.aspectj.lang.annotation.Pointcut;
-//import org.aspectj.lang.reflect.MethodSignature;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.beans.factory.annotation.Value;
-//import org.springframework.data.mongodb.core.MongoTemplate;
-//import org.springframework.stereotype.Component;
-//import org.springframework.web.context.request.RequestContextHolder;
-//import org.springframework.web.context.request.ServletRequestAttributes;
-//import org.springframework.web.multipart.MultipartFile;
-//
-//@Component
-//@Aspect
-//@Slf4j
-//public class VisitLogInterceptor {
-//
-//	@Autowired
-//	private RedisUtil redisUtil;
-//
-//	@Autowired
-//	private MongoTemplate mongoTemplate;
-//
-//	@Value("${server.servlet.context-path:null}")
-//	private String contextPath;
-//
-//	// 切入点表达式
-//	@Pointcut("execution(public * com.fdkankan.manage.controller..*.*(..))")
-//	public void privilege() {
-//	}
-//
-//	@Around("privilege()")
-//	public Object around(ProceedingJoinPoint pjp) throws Throwable {
-//
-//		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-//
-//		//获取客户端ip
-//		String clientIP = ServletUtil.getClientIP(request);
-//
-//		//获取uri
-//		String uri = request.getRequestURI();
-//		if(StrUtil.isNotEmpty(contextPath)){
-//			uri = uri.replaceFirst(contextPath, "");
-//		}
-//
-//		//获取请求方式
-//		String method = request.getMethod();
-//
-//		//获取浏览器信息
-//		String browser = this.getBrowser(request);
-//
-//		//获取参数
-//		String params = this.getParams(pjp, request);
-//
-//		//获取操作路径
-//		String requestPath = null;
-////		this.getRequestPath(uri);
-//
-//		//放行
-//		Object result = pjp.proceed();
-//
-//		//获取用户信息 如果已登录,从token中获取用户信息,如果是登录接口,查询数据库获取用户信息
-//		Map<String, Object> userInfo = this.getUserInfo(request, uri, result);
-//		Long userId = (Long)userInfo.get("userId");
-//		String userName = (String)userInfo.get("userName");
-//		String nickName = (String)userInfo.get("nickName");
-//
-//		//写入mongodb
-//		OperLog operLog = new OperLog();
-//		operLog.setUserId(userId);
-//		operLog.setUserName(userName);
-//		operLog.setNickName(nickName);
-//		operLog.setRequestPath(requestPath);
-//		operLog.setUri(uri);
-//		operLog.setMethod(method);
-//		operLog.setParams(params);
-//		operLog.setIp(clientIP);
-//		operLog.setBrowser(browser);
-//		operLog.setCreateTime(Calendar.getInstance().getTime());
-//		mongoTemplate.insert(operLog);
-//
-//		return result;
-//	}
-//
-//	private String getRequestPath(String uri){
-//		String hget = redisUtil.hget(RedisKey.MANAGE_MENU, uri);
-//		MenuBean menuBean = JSON.parseObject(hget, MenuBean.class);
-//		LinkedList<String> menuList = new LinkedList<>();
-//		this.getRequestPathHandler(menuList, menuBean);
-//		StringBuilder sb = new StringBuilder();
-//		menuList.stream().forEach(str->sb.append("->").append(str));
-//		return sb.substring(2);
-//	}
-//
-//	private void getRequestPathHandler(LinkedList list, MenuBean menuBean){
-//		list.addFirst("[" + menuBean.getName() + "]");
-//		if(Objects.isNull(menuBean.getParent())){
-//			return;
-//		}
-//		this.getRequestPathHandler(list, menuBean.getParent());
-//	}
-//
-//	private Map<String, Object> getUserInfo(HttpServletRequest request, String uri, Object result){
-//		String token = null;
-//		boolean isLogin = uri.endsWith("login");
-//		if(isLogin){
-//			String resultStr = JSON.toJSONString(result);
-//			JSONObject jsonObject = JSON.parseObject(resultStr);
-//			JSONObject data = jsonObject.getJSONObject("data");
-//			token = data.getString("token");
-//		}else{
-//			token = request.getHeader("token");
-//		}
-//		Claims claims = JwtUtil.parseJWT(token);
-//		Integer userId = (Integer) claims.get("userId");
-//		String userName = (String)claims.get("userName");
-//		String nickName = (String)claims.get("nickName");
-//		Map<String, Object> userInfo = new HashMap<>();
-//		userInfo.put("userId", Long.valueOf(userId));
-//		userInfo.put("userName", userName);
-//		userInfo.put("nickName", nickName);
-//		return userInfo;
-//	}
-//
-//	private String getParams(JoinPoint pjp, HttpServletRequest request){
-//
-//		// 获取参数名称
-//		String[] parameterNamesArgs = ((MethodSignature) pjp.getSignature()).getParameterNames();
-//		//获取请求参数值
-//		Object[] args = pjp.getArgs();
-//
-//		Map<String, Object> paramMap = new HashMap<>();
-//		String contentType = request.getContentType();
-//		if(ContentType.JSON.getValue().equals(contentType)){
-////			Arrays.stream(args).forEach(arg->paramMap.putAll((Map)arg));
-//			return JSON.toJSONString(args[0]);
-//		}else{
-//			for (int i = 0; i < args.length; i++) {
-//				if(args[i] instanceof MultipartFile){
-//					paramMap.put(parameterNamesArgs[i], ((MultipartFile) args[i]).getOriginalFilename());
-//					continue;
-//				}
-//				paramMap.put(parameterNamesArgs[i], args[i]);
-//			}
-//		}
-//		return JSON.toJSONString(paramMap);
-//	}
-//
-//	private String getBrowser(HttpServletRequest request){
-//		String userAgentStr = request.getHeader("User-Agent");
-//		UserAgent userAgent = UserAgentUtil.parse(userAgentStr);
-//		String browserType = userAgent.getBrowser().toString();
-//		String browserVersion = userAgent.getVersion();
-//		String browserFormat =  "%s(版本%s)";
-//		return  String.format(browserFormat, browserType, browserVersion);
-//	}
-//
-//}
-//
+package com.fdkankan.manage.interceptor;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.servlet.ServletUtil;
+import cn.hutool.http.ContentType;
+import cn.hutool.http.useragent.UserAgent;
+import cn.hutool.http.useragent.UserAgentUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.manage.bean.MenuBean;
+import com.fdkankan.manage.entity.OperLog;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import io.jsonwebtoken.Claims;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Objects;
+import javax.servlet.http.HttpServletRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+@Component
+@Aspect
+@Slf4j
+public class VisitLogInterceptor {
+
+	@Autowired
+	private RedisUtil redisUtil;
+
+	@Autowired
+	private MongoTemplate mongoTemplate;
+
+	@Value("${server.servlet.context-path:null}")
+	private String contextPath;
+
+	// 切入点表达式
+	@Pointcut("execution(public * com.fdkankan.manage.controller..*.*(..))")
+	public void privilege() {
+	}
+
+	@Around("privilege()")
+	public Object around(ProceedingJoinPoint pjp) throws Throwable {
+
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+
+		//获取客户端ip
+		String clientIP = ServletUtil.getClientIP(request);
+
+		//获取uri
+		String uri = request.getRequestURI();
+		if(StrUtil.isNotEmpty(contextPath)){
+			uri = uri.replaceFirst(contextPath, "");
+		}
+
+		//获取请求方式
+		String method = request.getMethod();
+
+		//获取浏览器信息
+		String browser = this.getBrowser(request);
+
+		//获取参数
+		String params = this.getParams(pjp, request);
+
+		//获取操作路径
+		String requestPath = this.getRequestPath(uri);
+
+        //放行
+		Object result = pjp.proceed();
+
+		//获取用户信息 如果已登录,从token中获取用户信息,如果是登录接口,查询数据库获取用户信息
+		Map<String, Object> userInfo = this.getUserInfo(request, uri, result);
+		Long userId = (Long)userInfo.get("userId");
+		String userName = (String)userInfo.get("userName");
+		String nickName = (String)userInfo.get("nickName");
+
+		//写入mongodb
+		OperLog operLog = new OperLog();
+		operLog.setUserId(userId);
+		operLog.setUserName(userName);
+		operLog.setNickName(nickName);
+		operLog.setRequestPath(requestPath);
+		operLog.setUri(uri);
+		operLog.setMethod(method);
+		operLog.setParams(params);
+		operLog.setIp(clientIP);
+		operLog.setBrowser(browser);
+		operLog.setCreateTime(Calendar.getInstance().getTime());
+		mongoTemplate.insert(operLog);
+
+		return result;
+	}
+
+	private String getRequestPath(String uri){
+		String hget = redisUtil.hget(RedisKey.MANAGE_MENU, uri);
+		MenuBean menuBean = JSON.parseObject(hget, MenuBean.class);
+		LinkedList<String> menuList = new LinkedList<>();
+		this.getRequestPathHandler(menuList, menuBean);
+		StringBuilder sb = new StringBuilder();
+		menuList.stream().forEach(str->sb.append("->").append(str));
+		return sb.substring(2);
+	}
+
+	private void getRequestPathHandler(LinkedList list, MenuBean menuBean){
+		list.addFirst("[" + menuBean.getName() + "]");
+		if(Objects.isNull(menuBean.getParent())){
+			return;
+		}
+		this.getRequestPathHandler(list, menuBean.getParent());
+	}
+
+	private Map<String, Object> getUserInfo(HttpServletRequest request, String uri, Object result){
+		String token = null;
+		boolean isLogin = uri.endsWith("login");
+		if(isLogin){
+			String resultStr = JSON.toJSONString(result);
+			JSONObject jsonObject = JSON.parseObject(resultStr);
+			JSONObject data = jsonObject.getJSONObject("data");
+			token = data.getString("token");
+		}else{
+			token = request.getHeader("token");
+		}
+		Claims claims = JwtUtil.parseJWT(token);
+		Integer userId = (Integer) claims.get("userId");
+		String userName = (String)claims.get("userName");
+		String nickName = (String)claims.get("nickName");
+		Map<String, Object> userInfo = new HashMap<>();
+		userInfo.put("userId", Long.valueOf(userId));
+		userInfo.put("userName", userName);
+		userInfo.put("nickName", nickName);
+		return userInfo;
+	}
+
+	private String getParams(JoinPoint pjp, HttpServletRequest request){
+
+		// 获取参数名称
+		String[] parameterNamesArgs = ((MethodSignature) pjp.getSignature()).getParameterNames();
+		//获取请求参数值
+		Object[] args = pjp.getArgs();
+
+		Map<String, Object> paramMap = new HashMap<>();
+		String contentType = request.getContentType();
+		if(ContentType.JSON.getValue().equals(contentType)){
+			return JSON.toJSONString(args[0]);
+		}else{
+			for (int i = 0; i < args.length; i++) {
+				if(args[i] instanceof MultipartFile){
+					paramMap.put(parameterNamesArgs[i], ((MultipartFile) args[i]).getOriginalFilename());
+					continue;
+				}
+				paramMap.put(parameterNamesArgs[i], args[i]);
+			}
+		}
+		return JSON.toJSONString(paramMap);
+	}
+
+	private String getBrowser(HttpServletRequest request){
+		String userAgentStr = request.getHeader("User-Agent");
+		UserAgent userAgent = UserAgentUtil.parse(userAgentStr);
+		String browserType = userAgent.getBrowser().toString();
+		String browserVersion = userAgent.getVersion();
+		String browserFormat = "%s(版本%s)";
+		return  String.format(browserFormat, browserType, browserVersion);
+	}
+
+}
+