操作ごとにユーザー情報を記録する

要件: 各操作のユーザー情報 (ログ情報) を記録し、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);
    }
}

セッションを通じてユーザーの IP アドレス、操作 (リクエスト リンク)、およびその他のデータを取得します。

おすすめ

転載: blog.csdn.net/ailaohuyou211/article/details/126332687