package cn.roderick.aspects;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;import java.util.Arrays;import java.util.Enumeration;@Component@Aspect/* * 定义切面执行的优先级,数字越低,优先级越高 * 在切入点之前执行:按order值有小到大的顺序执行 * 在切入点之后执行:按order值由大到小的顺序执行 */@Order(-5)public class AppLogAspect {    private Logger logger = LogManager.getLogger(AppLogAspect.class);    // 保证每个线程都有一个单独的实例    private ThreadLocal time = new ThreadLocal<>();    @Pointcut("execution(* com.sbm.controller..*.*(..))")    public void pointcut() {    }    @Before("pointcut()")    public void doBefore(JoinPoint joinPoint) {        time.set(System.currentTimeMillis());        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();        HttpServletRequest request = attributes.getRequest();        //记录请求的内容        logger.info("Request URL: " + request.getRequestURL().toString());        logger.info("Request Method: " + request.getMethod());        String ip = request.getRemoteAddr();        if (ip.indexOf(":0") > -1) {            ip = IPUtil.getRealIp();        }        logger.info("IP: " + ip);        logger.info("User-Agent: " + request.getHeader("User-Agent"));        logger.info("Class Method: " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());        logger.info("Cookies: " + request.getCookies());        logger.info("Params: " + Arrays.toString(joinPoint.getArgs()));        Enumeration enums = request.getParameterNames();        while (enums.hasMoreElements()) {            String paraName = enums.nextElement();            logger.info(paraName + ":" + request.getParameter(paraName));        }    }    @AfterReturning("pointcut()")    public void doAfterReturning(JoinPoint joinPoint) {        logger.info("耗时 : " + ((System.currentTimeMillis() - time.get())) + "ms");        logger.info("AppLogAspect.doAfterReturning()");    }}
   
package cn.roderick.util;import java.net.InetAddress;import java.net.NetworkInterface;import java.util.Enumeration;public class IPUtil {    public static String getRealIp() {        String realIp = null;        InetAddress ip = null;        try {            if (isWindowsOS()) { // windows                ip = InetAddress.getLocalHost();            } else { // Linux ,从网卡中获取ip地址                boolean bFindIP = false;                Enumeration netInterfaces =                        (Enumeration) NetworkInterface.getNetworkInterfaces();                NetworkInterface ni = null;                Enumeration ips = null;                while (netInterfaces.hasMoreElements()) {                    if (bFindIP) {                        break;                    }                    ni = (NetworkInterface) netInterfaces.nextElement();                    ips = ni.getInetAddresses();                    while (ips.hasMoreElements()) {                        ip = (InetAddress) ips.nextElement();                        if (ip.isSiteLocalAddress()                                && !ip.isLoopbackAddress()   //127.开头的都是lookback地址a                                && ip.getHostAddress().indexOf(":") == -1) {                            bFindIP = true;                            break;                        }                    }                }            }        } catch (Exception e) {            e.printStackTrace();        }        if (ip != null) {            realIp = ip.getHostAddress();        }        return realIp;    }    /**     * 判断当前系统类型     *     * @return     */    private static boolean isWindowsOS() {        boolean isWindowsOS = false;        String osName = System.getProperty("os.name");        if (osName.toLowerCase().indexOf("windows") > -1) {            isWindowsOS = true;        }        return isWindowsOS;    }}


更多相关文章

  1. Android(安卓)模拟键值
  2. 在activitygroup中用startActivityForResult
  3. AsyncTask executeOnExecutor
  4. Android的生命周期中的方法的执行场景
  5. Android获取所有存储卡挂载路径
  6. Android(安卓)7.0 Launcher3的启动和加载流程分析----转载
  7. Android(安卓)如何连真机测试
  8. android 多界面应用程序退出的方法
  9. Android远程连接SQL Server 2008数据库

随机推荐

  1. 介绍Android拍照,录像开发的相关东东
  2. Android:apk文件结构
  3. [原]Android应用程序进程启动过程的源代
  4. Android快速开发,十个最常用的框架
  5. 在android的eclipse开发环境中配置git环
  6. [置顶] Mc小冰总结的Android开发工程师面
  7. Android 基础——第一行代码读书笔记(1)
  8. Ubuntu Android开发环境配置
  9. android开发工具合集(Zipalign)
  10. Android Sqlite 数据库—基础篇