All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.novelweb.annotation.log.util.Annotation Maven / Gradle / Ivy

package cn.novelweb.annotation.log.util;

import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import cn.novelweb.annotation.log.pojo.AccessLogInfo;
import cn.novelweb.ip.IpUtils;
import cn.novelweb.ip.Region;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import java.lang.reflect.Method;
import java.util.Date;
import java.util.concurrent.Future;

/**
 * 

封装一些关于日志注解需要用到的公共方法

*

2019-12-05 22:03

* * @author Dai Yuanchuan **/ public class Annotation { /** * 判断是否存在注解 存在就获取注解信息 * * @param joinPoint 切点信息 * @param annotationClass 需要获取的注解类 * @param 注解信息 * @return 如果存在则返回注解信息,否则返回NULL */ public static A getAnnotation (JoinPoint joinPoint, Class annotationClass) { Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Method method = methodSignature.getMethod(); if (method != null) { return method.getAnnotation(annotationClass); } return null; } /** * 初始化日志信息 * * @param title 模块名称 * @param isGetIp 是否需要获取用户IP的实际地理位置 * @param e 异常信息 * @return 返回带有默认数据的日志信息 */ public static AccessLogInfo initInfo(final String title, final boolean isGetIp, final Exception e) { // 获取Request信息 ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); // 初始化日志信息 AccessLogInfo accessLogInfo = AccessLogInfo.builder() .ip("127.0.0.1") .requestUri("") .location("0-0-内网IP 内网IP") .build(); String userAgent = "无法获取User-Agent信息"; if (requestAttributes != null) { userAgent = requestAttributes.getRequest().getHeader("User-Agent"); accessLogInfo.setIp(ServletUtil.getClientIP(requestAttributes.getRequest())); accessLogInfo.setRequestUri(requestAttributes.getRequest().getRequestURI()); accessLogInfo.setMethod(requestAttributes.getRequest().getMethod()); accessLogInfo.setRequest(requestAttributes.getRequest()); } Future future = null; if (isGetIp) { // 异步获取IP实际地理位置信息 future = ThreadUtil.execAsync(() -> IpUtils.getIpLocationByBtree(accessLogInfo.getIp())); } // 获取/赋值 浏览器、os系统等信息 UserAgent ua = UserAgentUtil.parse(userAgent); accessLogInfo.setBrowser(ua.getBrowser().toString()); accessLogInfo.setBrowserVersion(ua.getVersion()); accessLogInfo.setBrowserEngine(ua.getEngine().toString()); accessLogInfo.setBrowserEngineVersion(ua.getEngineVersion()); accessLogInfo.setIsMobile(ua.isMobile()); accessLogInfo.setOs(ua.getOs().toString()); accessLogInfo.setPlatform(ua.getPlatform().getName()); accessLogInfo.setSpider(SpiderUtils.parseSpiderType(userAgent)); accessLogInfo.setUserAgent(userAgent); // 访问的模块、状态、时间等 accessLogInfo.setTitle(title); accessLogInfo.setStatus(e != null ? 1 : 0); accessLogInfo.setCreateTime(new Date()); // 访问出现的异常信息 if (e != null) { if (e.getCause() != null) { accessLogInfo.setErrorCause(e.getCause().toString()); accessLogInfo.setErrorMsg(e.getCause().getMessage()); } } else { accessLogInfo.setErrorCause(""); accessLogInfo.setErrorMsg(""); } if (future != null) { try { Region region = future.get(); accessLogInfo.setLocation(region.getCountry() + "-" + region.getProvince() + "-" + region.getCity() + " " + region.getIsp()); } catch (Exception e1) { accessLogInfo.setErrorCause(e1.getCause().toString()); accessLogInfo.setErrorMsg(e1.getCause().getMessage()); accessLogInfo.setStatus(1); } } return accessLogInfo; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy