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

旅游网站建设规划方案怎样查看网站建设时间

旅游网站建设规划方案,怎样查看网站建设时间,怎么做简单网站首页,百度客户端登录目的:通过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.yayakq.cn/news/617237/

相关文章:

  • 企业采购网站有哪些哈尔滨市招投标信息网
  • ios开发者账号多少钱婚纱网站目录优化
  • 2017淘宝客网站怎么做深圳怎么注册公司网站
  • 贷款超市网站开发龙井网站建设
  • 哪些网站设计的高大上市场营销策划名词解释
  • 郑州做网站那家好nas wordpress备案
  • 学什么可以做网站衡水网站制作费用
  • 深圳快速网站制作哪家公司好网站开发过程中的方法
  • 检察机关加强网站建设百度关键词工具入口
  • 那里可以做app网站想学习做网站
  • 做热处理工艺的网站有哪些公司网站如何建设教学视频
  • 公司做公司网站太原 网站建设
  • 网站优化推广外包平台设计图片欣赏
  • 网站建设的公司服务无锡网站建设楚天软件
  • 设计师导航网站上饶网站建设3ao cc专业a
  • python 网站开发 prf网站开发中网页之间的链接形式有
  • 网站建设企业合作邀请函html手机网站
  • 网站建设规定广州企业网站建设公司
  • 给网站底部做友情链接阳江网上房地产官网
  • 甘肃省省建设厅网站wordpress 外观 编辑
  • 群晖ds216j能否做网站黄页在哪里打开
  • 携程网站 建设平台分析网站开发设计
  • 北京外贸网站设计备案wordpress 导出文章
  • 网站建设技术线路选择网站主体备案号
  • 全屏响应式网站wordpress商城汉化主题
  • 网站标签页在哪里设置做网站贷款
  • 网站外链建设需要考核深圳pc端网站开发
  • 企业管理的官方网站有哪些湘西建设监理协会网站
  • 宁波江东区网站建设科技网站建设+长沙
  • 公司想为一个产品做多个网站深圳网站设计公司费用是