构建spring boot web项目:十、添加增强日志AOP、集成Excel处理工具

一、添加增强日志AOP

引入依赖 pom.xml(base)


        <!--AOP-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
IpUtil.java(base)
package com.lyj.common.base.util;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * IP工具类
 */
public class IpUtil {

    public static String getIpAddr(HttpServletRequest request) {
        if (null == request) {
            return "null";
        }

        String ipAddress = null;
        try {
            ipAddress = request.getHeader("x-forwarded-for");
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getRemoteAddr();
                if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {
                    // 根据网卡取本机配置的IP
                    InetAddress inet = null;
                    try {
                        inet = InetAddress.getLocalHost();
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    }
                    ipAddress = inet.getHostAddress();
                }
            }

            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
                // = 15
                if (ipAddress.indexOf(",") > 0) {
                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
                }
            }
        } catch (Exception e) {
            ipAddress = "";
        }
        // ipAddress = this.getRequest().getRemoteAddr();

        return ipAddress;
    }

}
Log.java(base)
package com.lyj.common.base.aspect;

import java.lang.annotation.*;

/**
 * 日志AOP注解
 */
@Target({ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {

}
IpLogAspect.java(base)
package com.lyj.common.base.aspect;

import com.lyj.common.base.util.IpUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * aop切面
 * 增强@log注解
 * 在controller前后记录请求信息
 */
@Component
@Aspect
@Slf4j
@AllArgsConstructor
public class IpLogAspect {

    private final HttpServletRequest request;

    //定义切点
    @Pointcut("@annotation(com.lyj.common.base.aspect.Log)")
    public void pointCut() {
    }

    @Pointcut("execution(public * com.lyj.service..api..*.*(..))")
    public void controller() {
    }

    /**
     * api 日志
     *
     * @param joinPoint
     * @return
     */
    @Around("controller()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        Signature signature = joinPoint.getSignature();
        Object[] args = joinPoint.getArgs();
        String ipAddr = IpUtil.getIpAddr(request);

        String requestURL = request == null ? "" : request.getRequestURL().toString();
        long start = System.currentTimeMillis();
        log.info("start:{}|url:{}|method:{}|args:{}|customer_ip:{}", start, requestURL, signature, args, ipAddr);

        Object proceed = null;
        try {
            proceed = joinPoint.proceed();
        } finally {
            log.info("end:{}|consume:{}|url:{}|method:{}|customer_ip:{}", System.currentTimeMillis(), System.currentTimeMillis() - start, requestURL, signature, ipAddr);
        }

        return proceed;
    }

    /**
     * 内部方法
     *
     * @param joinPoint
     * @return
     */
    @Around("pointCut()")
    public Object around1(ProceedingJoinPoint joinPoint) throws Throwable {
        Signature signature = joinPoint.getSignature();
        Object[] args = joinPoint.getArgs();

        log.info("start:{}|method:{}|args:{}", System.currentTimeMillis(), signature, args);

        Object proceed = null;
        try {
            proceed = joinPoint.proceed();
        } finally {
            log.info("end:{}|method:{}|args:{}", System.currentTimeMillis(), signature, args);
        }

        return proceed;
    }
}

 启动测试

增强前

增强后

二、集成Excel处理工具(easyexcel) 

引入依赖

pom.xml(initMode)


        <!--Excel处理工具-->
        <easyexcel.version>3.0.5</easyexcel.version>

            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值