需求: 记录每个操作的用户信息(日志信息),使用aop切面编程
建表:
@Component
@Aspect // 切面
public class RecordLogAop {
@Autowired
LogService logServiceImpl;
// 先定义一个方法-表示我们的切点(多个连接点)
@Pointcut("execution(* cn.wolfcode.controller.*.*(..))") // controller包下的所有类的所有方法都要执行
public void pointCut(){
}
// 切点的执行之前去执行
@Before("pointCut()")
public void before(){
// 怎么记录? ip uid-用户标志 用户操作 时间-获取系统时间 (这些均从HttpServletRequest中获取)
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = sra.getRequest();
String ip = request.getRemoteAddr(); // ip
String requestURI = request.getRequestURI(); // 用户操作就是请求的链接
String uid = null;
if(requestURI.endsWith("/login")){
uid = request.getParameter("username");
}else{
Object userInfo = request.getSession().getAttribute("userInfo");
uid = userInfo != null?((T_User)userInfo).getUcode():"null";
}
//uid -用户标志--用户在登录时从参数中获取(上面)
// 调用Service层
T_Log t_log = new T_Log();
t_log.setIp(ip);
t_log.setOperation(requestURI);
t_log.setOptime(new Timestamp(System.currentTimeMillis()));
t_log.setUid(uid);
logServiceImpl.addLog(t_log);
}
}
通过Session去获取用户的ip地址、操作(请求链接)等数据。