当前位置: 首页 > news >正文

做微商网站新乡网站推广

做微商网站,新乡网站推广,seo优化收费,商城网站怎么做seo目的:通过AOP切面,统一记录接口的访问日志 1、加maven依赖 2、 增加日志类RequestLog 3、 配置AOP切面,把请求前的request、返回的response一起记录 package com.template.common.config;import cn.hutool.core.util.ArrayUtil; import cn.hu…

目的:通过AOP切面,统一记录接口的访问日志

1、加maven依赖

2、 增加日志类RequestLog

3、 配置AOP切面,把请求前的request、返回的response一起记录

package com.template.common.config;import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.template.common.domain.model.RequestLog;
import eu.bitwalker.useragentutils.UserAgent;
import jakarta.servlet.http.HttpServletRequest;
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.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;/*** 使用AOP切面记录请求日志*/
@Aspect
@Component
@Slf4j
public class RequestLogger {/*** 切入点*/@Pointcut("execution(public * com.template.api.controller.*.*Controller.*(..))")public void controllerPointcut() {// 本方法不会被执行,只是作为一个标记,与被注解的服务方法进行关联// 切入点为controller的public方法,也就是各个请求路径}/*** 环绕操作** @param joinPoint 切入点* @return 原方法返回值* @throws Throwable 异常信息*/@Around("controllerPointcut()")public Object controllerLogging(ProceedingJoinPoint joinPoint) throws Throwable {// 开始打印请求日志ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();// 计算各个日志参数long startTime = System.currentTimeMillis();Thread currentThread = Thread.currentThread();String userHost = extractUserHost(request);String userAgentString = request.getHeader("User-Agent");UserAgent userAgent = UserAgent.parseUserAgentString(userAgentString);Map<String, Object> requestParams = extractRequestParams(joinPoint);Object responseResult = joinPoint.proceed();Signature controllerMethod = joinPoint.getSignature();String classMethod = controllerMethod.getDeclaringTypeName() + "." + controllerMethod.getName();final RequestLog requestLog = RequestLog.builder().userHost(userHost).userOs(userAgent.getOperatingSystem().getName()).userBrowser(userAgent.getBrowser().getName()).userAgent(userAgentString).requestUrl(request.getRequestURL().toString()).requestMethod(request.getMethod()).requestParams(requestParams).responseResult(responseResult).classMethod(classMethod).threadId(Long.toString(currentThread.getId())).threadName(currentThread.getName()).costMillisecond(System.currentTimeMillis() - startTime).build();// 打印日志log.info("Request Log Info : {}", JSONUtil.toJsonStr(requestLog));return responseResult;}/*** 获取用户Host地址** @param request 请求对象* @return 用户Host*/private static String extractUserHost(HttpServletRequest request) {String xRealIp = request.getHeader("X-Real-IP");if (StrUtil.isNotEmpty(xRealIp) && !"unknown".equalsIgnoreCase(xRealIp)) {return xRealIp;}String xForwardedFor = request.getHeader("x-forwarded-for");if (StrUtil.isNotEmpty(xForwardedFor) && !"unknown".equalsIgnoreCase(xForwardedFor)) {return xForwardedFor;}String proxyClientIp = request.getHeader("Proxy-Client-IP");if (StrUtil.isNotEmpty(proxyClientIp) && !"unknown".equalsIgnoreCase(proxyClientIp)) {return proxyClientIp;}String wlProxyClientIp = request.getHeader("WL-Proxy-Client-IP");if (StrUtil.isNotEmpty(wlProxyClientIp) && !"unknown".equalsIgnoreCase(wlProxyClientIp)) {return wlProxyClientIp;}String httpClientIp = request.getHeader("HTTP_CLIENT_IP");if (StrUtil.isNotEmpty(httpClientIp) && !"unknown".equalsIgnoreCase(httpClientIp)) {return httpClientIp;}String httpxForwardedFor = request.getHeader("HTTP_X_FORWARDED_FOR");if (StrUtil.isNotEmpty(httpxForwardedFor) && !"unknown".equalsIgnoreCase(httpxForwardedFor)) {return httpxForwardedFor;}String remoteAddr = request.getRemoteAddr();if (!"127.0.0.1".equals(remoteAddr) && !"0:0:0:0:0:0:0:1".equals(remoteAddr)) {return remoteAddr;}//根据网卡取本机IP地址try {return InetAddress.getLocalHost().getHostAddress();} catch (UnknownHostException e) {log.error("getIpAddress exception:", e);}return xRealIp;}/*** 获取请求参数** @param joinPoint 切入点* @return 请求参数*/private Map<String, Object> extractRequestParams(ProceedingJoinPoint joinPoint) {MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();final String[] parameterNames = methodSignature.getParameterNames();final Object[] parameterValues = joinPoint.getArgs();if (ArrayUtil.isEmpty(parameterNames) || ArrayUtil.isEmpty(parameterValues)) {return Collections.emptyMap();}if (parameterNames.length != parameterValues.length) {log.warn("{}方法参数名和参数值数量不一致", methodSignature.getName());return Collections.emptyMap();}Map<String, Object> requestParams = new HashMap<>();for (int i = 0; i < parameterNames.length; i++) {requestParams.put(parameterNames[i], parameterValues[i]);}return requestParams;}}

4、查看效果

 

 也可以把日志写入到数据库里面,自由发挥。

http://www.ds6.com.cn/news/35444.html

相关文章:

  • 网站设计的公司怎么样云搜索引擎
  • 站酷设计网站官网入口插画设计学生网页设计模板
  • 软件网站建设基本流程seo关键词排名优化案例
  • 机器配件做外贸上什么网站seo网站优化平台
  • wordpress 添加点赞长沙官网seo
  • php网站微信登录怎么做什么是网络推广
  • 自建个人网站seo整站优化方案案例
  • 东莞网站系统后缀十大接单平台
  • 浙江省住房和城乡建设厅官网崇左seo
  • 傻瓜式做网站程序福州seo结算
  • 武安网站设计公司长沙网址seo
  • 叫别人做网站安全吗武汉百度推广外包
  • 信誉好的昆明网站建设网页自动点击软件
  • wordpress 搭建vultr店铺seo是什么意思
  • 推广网站代码有名的seo外包公司
  • 网站安全证书存在问题什么是引流推广
  • 淘宝客网站怎么做搜索引擎优化seo论文
  • 深圳工程建设有限公司一键优化大师
  • 东莞做网站找微客巴巴网站项目开发流程
  • 甘肃省公务员培训网站昆明网站seo服务
  • 建设网站需要哪个软件免费永久个人域名注册
  • 用asp做的大型网站万能搜索
  • 中央纪委网站 举报 要这么做才有效网址大全
  • ui设计做app网站要学什么营销策划书范文案例
  • 在北京网站建设的岗位线上运营推广方案
  • 品牌建设浅谈seo技术优化技巧
  • 手机版网站开发人员选项游戏代理平台
  • 安阳市网站建设的公司浏览器网站大全
  • 那个网站做字体放心网站推广优化咨询
  • 中国最近新闻大事件郑州seo公司哪家好