1.maven添加依赖
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.2.8</version>
</dependency>
2. SpringMVC.xml

添加 <aop:aspectj-autoproxy proxy-target-class="true" />

3. 编写注解及对应方法
自定义用户操作注解 (定义UserOperate注解)
package com.jz.aop;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;

/***
 * *自定义用户操作注解 (定义UserOperate注解)
 * 
 * @author traveler
 * @date 2019年11月26日
 */

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
@Documented
public @interface UserOperate {

    // 模块名
    String moduleName() default "";

    // 操作内容
    String option() default "";
}
处理用户操作日志切面类
package com.jz.aop;

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
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.jz.service.UserOperateLogService;
import com.jz.vo.OperateLog;
import com.jz.vo.UserInfo;

/**
 * *处理用户操作日志切面类
 * 
 * @author traveler
 * @date 2019年11月26日
 */
@Aspect
@Component
public class LogAspect {

    @Autowired
    private UserOperateLogService userOperateLogService;

    @Pointcut("@annotation(com.jz.aop.UserOperate)")
    public void controllerAspecta() {
    }

    @AfterReturning(value = "controllerAspecta() && @annotation(annotation) &&args(object,..) ", argNames = "annotation,object")
    public void logSave(UserOperate annotation, Object object) {
        RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
        UserInfo userInfo = (UserInfo) request.getSession().getAttribute("UserVo"); // 从session中获取登录用户的信息
        Integer userid = userInfo.getUserId(); // 用户id
        String username = userInfo.getUsername(); // 用户 名
        String ipAddress = this.getIpAddr(request);
        String moduleName = annotation.moduleName();
        String optionDesc = annotation.option();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
        String createTime = df.format(new Date());
        OperateLog operateLog = new OperateLog(userid, username, moduleName, optionDesc, ipAddress, createTime);
        System.out.println(operateLog.toString());
        userOperateLogService.addOperateLog(operateLog);
    }

    /**
     * *获取IP地址
     * 
     * @param request
     * @return
     */
    private String getIpAddr(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.getRemoteAddr();
        }
        return ip;
    }

}
vo
package com.jz.vo;

/**
 * * 用户操作日志
 * 
 * @author traveler
 * @date 2019年11月26日
 */
public class OperateLog {

    private Integer Id;
    private Integer userId;
    private String userName;
    private String moduleName;
    private String operateDesc;
    private String ipAddress;
    private String createTime;

    public OperateLog() {

    }
    
    public OperateLog(Integer userId, String userName, String moduleName, String operateDesc, String ipAddress,
            String createTime) {
        super();
        this.userId = userId;
        this.userName = userName;
        this.moduleName = moduleName;
        this.operateDesc = operateDesc;
        this.ipAddress = ipAddress;
        this.createTime = createTime;
    }

    public OperateLog(Integer id, Integer userId, String userName, String moduleName, String operateDesc,
            String ipAddress, String createTime) {
        super();
        Id = id;
        this.userId = userId;
        this.userName = userName;
        this.moduleName = moduleName;
        this.operateDesc = operateDesc;
        this.ipAddress = ipAddress;
        this.createTime = createTime;
    }

    public Integer getId() {
        return Id;
    }

    public void setId(Integer id) {
        Id = id;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getModuleName() {
        return moduleName;
    }

    public void setModuleName(String moduleName) {
        this.moduleName = moduleName;
    }

    public String getOperateDesc() {
        return operateDesc;
    }

    public void setOperateDesc(String operateDesc) {
        this.operateDesc = operateDesc;
    }

    public String getIpAddress() {
        return ipAddress;
    }

    public void setIpAddress(String ipAddress) {
        this.ipAddress = ipAddress;
    }

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "OperateLog [Id=" + Id + ", userId=" + userId + ", userName=" + userName + ", moduleName=" + moduleName
                + ", operateDesc=" + operateDesc + ", ipAddress=" + ipAddress + ", createTime=" + createTime + "]";
    }

}
使用注解
    /**
     * *网站更新日志页面
     * 
     * @author ZFC
     * @date 2019年10月10日
     * @return
     */
    @UserOperate(moduleName = "用户模块",option = "进入网站更新日志页面")
    @RequestMapping("/GoUpdate")
    public String GoUpdate() {
        return "UpdateRecord";
    }

添加

@UserOperate(moduleName = "用户模块",option = "进入网站更新日志页面")

即可

最后修改:2021 年 08 月 20 日
如果觉得我的文章对你有用,请随意赞赏