首页>代码>基于spring boot+layui+redis+activiti+Apache Shiro整合开发网站权限管理系统>/kvf-admin-activiti/kvf-admin-activiti/src/main/java/com/kalvin/kvf/common/aspect/ActionAspect.java
package com.kalvin.kvf.common.aspect; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.http.useragent.Browser; import cn.hutool.http.useragent.Platform; import cn.hutool.http.useragent.UserAgentUtil; import com.kalvin.kvf.common.annotation.Log; import com.kalvin.kvf.common.utils.HttpServletContextKit; import com.kalvin.kvf.modules.sys.entity.User; import com.kalvin.kvf.modules.sys.service.ILogService; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; 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.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 javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; /** * 【作用】操作日志,切面处理类<br> * 【说明】(无) * @author Kalvin */ @Aspect @Component @Slf4j public class ActionAspect { @Autowired private ILogService logService; @Pointcut("@annotation(com.kalvin.kvf.common.annotation.Log)") public void logPointCut() { } @Before("logPointCut()") public void before(JoinPoint joinPoint) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); // 如果是退出登录请求。侧使用前置通知 if ("logout".equals(method.getName())) { // 保存日志 saveActionLog(joinPoint, 0, false); } } @Around("logPointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { long beginTime = System.currentTimeMillis(); //执行方法 Object result = point.proceed(); //执行时长(毫秒) long time = System.currentTimeMillis() - beginTime; //保存日志 saveActionLog(point, time, true); return result; } private void saveActionLog(JoinPoint joinPoint, long time, boolean isAround) { User user = (User) SecurityUtils.getSubject().getPrincipal(); if (user == null) { return; } MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); String methodName = method.getName(); if (isAround && "logout".equals(methodName)) { return; } com.kalvin.kvf.modules.sys.entity.Log actionLog = new com.kalvin.kvf.modules.sys.entity.Log(); Log action = method.getAnnotation(Log.class); if(action != null){ // 注解上的描述 if (StrUtil.isNotBlank(action.value())) { actionLog.setOperation(action.value()); } else { // 如果注解上的描述为空,则默认使用方法名 actionLog.setOperation(methodName); } } // 获取request HttpServletRequest request = HttpServletContextKit.getHttpServletRequest(); // 设置IP地址 String clientIP = ServletUtil.getClientIP(request); if ("0:0:0:0:0:0:0:1".equals(clientIP)) { clientIP = "127.0.0.1"; } actionLog.setIp(clientIP); actionLog.setForwardAction(request.getRequestURI()); // 设置浏览器和设备系统 String header = request.getHeader("User-Agent"); Browser browser = UserAgentUtil.parse(header).getBrowser(); Platform platform = UserAgentUtil.parse(header).getPlatform(); String browserName = browser.getName() + " " + browser.getVersion(header); String os = platform.getName(); actionLog.setBrowser(browserName); actionLog.setOs(os); // 设置用户信息 actionLog.setUserId(user.getId()); actionLog.setUsername(user.getUsername()); actionLog.setTime(time); // 保存系统日志 logService.save(actionLog); } }
最近下载更多
educationAAA LV11
11月4日
TY0165 LV20
6月21日
简约时尚 LV13
1月16日
skipple3 LV39
2023年10月26日
x1048446262 LV2
2023年8月30日
yoyoch1 LV1
2023年8月28日
3334004690 LV10
2023年8月15日
zhy1989wz LV6
2023年7月6日
微信网友_6482083022819328 LV14
2023年6月3日
oclocl LV1
2023年4月12日
最近浏览更多
citybird LV4
11月20日
sunlzh888888 LV29
9月20日
李朝磊 LV18
7月3日
educationAAA LV11
6月23日
TY0165 LV20
6月21日
颜菜菜 LV2
6月19日
xiaozhi丶 LV15
3月24日
Gin19960217 LV4
3月5日
微信网友_6844263371689984
1月30日
暂无贡献等级
简约时尚 LV13
1月16日