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 = "进入网站更新日志页面")
即可
3 条评论
故事线完整,伏笔巧妙,结局耐人寻味。
《特利迦奥特曼 特别篇3 滋生错乱的邪恶之花》动画片高清在线免费观看:https://www.jgz518.com/xingkong/165815.html
你的文章让我感受到了不一样的视角,非常精彩。 https://www.4006400989.com/qyvideo/25802.html