Spring Cloud 指定包、类、方法名实现AOP切片登陆记录统计功能

1. 所需 jar 包:



    4.1
    3.4
    1.6.1


    org.apache.commons
    commons-collections4
    ${commons.collections4.version}


    org.apache.commons
    commons-lang3
    ${commons.lang3.version}


    dom4j
    dom4j
    ${dom4j.version}

2. 代码:

package com.dmap.auth.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

@Aspect
@Component
public class LoginHistoryV1Aop {

    //只匹配 api 包中以下 5 个类中的以 ogin 结尾的方法
    @Pointcut("execution(public * com.dmap.auth.controller.api.LoginController.*ogin(..)) " +
            "|| execution(public * com.dmap.auth.controller.api.QQController.*ogin(..)) " +
            "|| execution(public * com.dmap.auth.controller.api.WechatController.*ogin(..)) " +
            "|| execution(public * com.dmap.auth.controller.api.WeboController.*ogin(..)) " +
            "|| execution(public * com.dmap.auth.controller.api.LenovoController.*ogin(..))")
    public void loginHistoryLog() {
        //Do nothing in this method.
    }

    @AfterReturning(pointcut = "loginHistoryLog()", returning = "object")
    public void doAfterReturning(JoinPoint joinPoint, Object object) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request;
        String tempIp = "";
        if (attributes != null) {
            request = attributes.getRequest();
            if (request != null) {
                tempIp = request.getRemoteAddr();
            }
        }
        String ip = tempIp;//获得 ip 地址
        Object value = object; //object 是切片所拦截的方法的返回值
        String classMethod = joinPoint.getSignature().getName();//获得调用的方法名称
    }

}

你可能感兴趣的:(程序人生)