aop记录轨迹

文章目录

            • 一、常用的场景
            • 1. 请求拦截
            • 2. 异步保存轨迹
            • 二、案例实战
            • 2.1. pom
            • 2.2. 自定义注解
            • 2.3. aop拦截
            • 2.4. 测试类
            • 2.5. 保存日志

一、常用的场景
1. 请求拦截

通过aop 请求拦截,举个例子,第三方厂商请求平台接口,先去数据库查询该接口,此ip是否有访问权限,有如果就通过,继续下面的逻辑,否则,权限访问拦截,请求到此结束!

2. 异步保存轨迹

见下面案例:说一下思路
也是同理,同样通过拦截器来实现的,利用下的注解即可,案例中柚子
@Aspect
@Pointcut(“execution( * com.gblfy.logboot...*(…))”)//两个…代表所有子目录,最后括号里的两个…代表所有参数
@After
@Around

二、案例实战
2.1. pom
     <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></dependency>
2.2. 自定义注解
package com.gblfy.logboot.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
//注解作用的位置,ElementType.METHOD表示该注解仅能作用于方法上
@Target(ElementType.METHOD)
public @interface Log {String value() default "";
}
2.3. aop拦截
package com.gblfy.logboot;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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;/*** 日志文件记录*/
@Aspect
@Component
public class WebLogAspect {private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);@AutowiredHttpServletRequest request;@Pointcut("execution( * com.gblfy.logboot.*.*.*(..))")//两个..代表所有子目录,最后括号里的两个..代表所有参数public void logPointCut() {}@Before("logPointCut()")public void doBefore(JoinPoint joinPoint) throws Throwable {// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 记录下请求内容logger.info("请求地址 : " + request.getRequestURL().toString());logger.info("HTTP METHOD : " + request.getMethod());// 获取真实的ip地址//logger.info("IP : " + WebUtils.getIpAddress(request));logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."+ joinPoint.getSignature().getName());logger.info("参数 : " + Arrays.toString(joinPoint.getArgs()));
//        loggger.info("参数 : " + joinPoint.getArgs());}@After("logPointCut()")public void doAfter(JoinPoint joinPoint) throws Throwable {System.out.println("request---" + request.getAttribute("aa"));}@Around("logPointCut()")public Object doAround(ProceedingJoinPoint pjp) throws Throwable {long startTime = System.currentTimeMillis();Object ob = pjp.proceed();// ob 为方法的返回值logger.info("耗时 : " + (System.currentTimeMillis() - startTime));return ob;}
}
2.4. 测试类
package com.gblfy.logboot.controller;import com.gblfy.logboot.annotation.Log;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@RequestMapping("/log")
@RestController("日志控制器")
public class LogController {@Log("测试收集日志")@RequestMapping("/save")public String saveLog(@RequestParam(name = "token") String token,@RequestParam(name = "name") String name,HttpServletRequest request, HttpServletResponse response) {System.out.println("开始收集log"+token+name);request.setAttribute("aa","assddddd");return "收集日志succes333s";}
//    http://localhost:8080/log/save?token=123
}
2.5. 保存日志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人技术大提升:NVIDIA为构建自主机器统一平台树立里程碑

近日&#xff0c;NVIDIA发布了全新版本Isaac软件开发套件&#xff08;SDK&#xff09;&#xff0c;为机器人提供更新的AI感知和仿真功能。 NVIDIA创始人兼首席执行官黄仁勋在NVIDIA最新的GPU技术会议&#xff08;GTC CHINA 2019&#xff09;上宣布了该消息。在建立统一的机器人…

DLA实现跨地域、跨实例的多AnalyticDB读写访问

1. 介绍 实时数据仓库ADB&#xff08;AnalyticDB&#xff09;云产品&#xff1a;https://www.aliyun.com/product/ads数据湖分析服务DLA&#xff08;Data Lake Analytics&#xff09;云产品&#xff1a;https://www.aliyun.com/product/datalakeanalytics数据湖分析DLA简介&am…

Data Lake Analytics: 以SQL方式查询Redis数据

Data Lake Analytics 作为云上数据处理的枢纽&#xff0c;最近加入了对于Redis 的支持, 这篇教程带你玩转 DLA 的 Redis 支持。 创建数据库 在 DLA 里面创建一个底层映射到 Redis 的数据库的语法如下: CREATE DATABASE redis_test WITH DBPROPERTIES (catalog redis,locati…

科创板注册获批,优刻得将成为“公有云第一股”

12月24日&#xff0c;证监会公告&#xff0c;同意优刻得科技股份有限公司&#xff08;以下简称“UCloud优刻得”&#xff09;科创板IPO注册&#xff1b;从今年4月提交招股书&#xff0c;历时8个月&#xff0c;4轮往返问询&#xff0c;中国领先的中立第三方云计算服务商&#xf…

一、项目管理框架【PMP 】

文章目录1. 项目的定义2. 项目的特性3. 项目和运营4. 项目管理最终要达成5. 新核心的三重约束6. 项目目标各维度顺序7. 项目集合项目组合的区别8. 指南的关键组成部分9. 项目和开发生命周期10. 项目管理的5大过程组合49个过程11. 项目管理商业文件12. 文件间的关系1. 项目的定义…

云上中国年,阿里云CDN猪年春节高峰流量再创新高

虽然科技拉近了时空距离&#xff0c;但是大部分中国人还是在春节前穿越了千山万水&#xff0c;为的就是能与家人吃一顿年夜饭&#xff0c;这是中国人不变的情结。 过春节&#xff0c;红包可是少不了的关键词&#xff0c;互联网赋予了红包更多元的意义。各大平台每年都会有新玩…

分布式事务中间件 Fescar—RM 模块源码解读

前言 在SOA、微服务架构流行的年代&#xff0c;许多复杂业务上需要支持多资源占用场景&#xff0c;而在分布式系统中因为某个资源不足而导致其它资源占用回滚的系统设计一直是个难点。我所在的团队也遇到了这个问题&#xff0c;为解决这个问题上&#xff0c;团队采用的是阿里开…

腾讯多媒体实验室:基于三维卷积神经网络的全参考视频质量评估算法

腾讯有多个视频业务线&#xff0c;点播视频有腾讯视频、企鹅影视&#xff0c;短视频有微视、K歌&#xff0c;直播类有Now直播、企鹅电竞&#xff0c;实时传输类有QQ和微信的音视频通话、无线投屏和腾讯会议等。 用户对不同的产品有不同程度的期待&#xff1a;比如理想网络环境…

使用 QuickBI 搭建酷炫可视化分析

随着各行各业大数据的渗透&#xff0c;BI 类数据分析需求与日俱增&#xff0c;如何让可视化更好的展现数据的价值&#xff0c;是 BI 类产品一直努力的方向。对此国内外的BI产品都有自己的方法&#xff0c;如国外大牌的 PowerBI、Tableau&#xff0c;还有国内的 FineBI、BDP、Qu…

三、项目经理的角色【PMP 】

文章目录1. 项目经理的职责2.项目经理的人才三角3.领导力 技能4. 领导力风格1. 项目经理的职责 领导团队达成目标 协助项目的商业论证&#xff0c;实现项目的商业价值 推送战略目标&#xff0c;参与项目的启动到收尾的过程&#xff0c;确保客户对项目满意 2.项目经理的人才三…

FRIDA 实用手册

FRIDA 实用手册 本文目的是作为工具类文章&#xff0c;收集整理了一些 FRIDA 的使用技巧和用例&#xff0c;方便同学们在开发使用过程中开袋即食。 frida 的基础教程可以直接参看官网说明。 Python 部分 JS 中文支持 使用 codecs.open(scriptpath, "r", "u…

深度学习原来还可以这么学!

最近身边很多朋友在讨论人工智能&#xff0c;讨论人工智能在我们生活中的应用&#xff0c;随之而来就开始讨论深度学习技术&#xff0c;但是由于深度学习的涉及面比较广&#xff0c;对数学的要求比较高&#xff0c;所以想学也不太敢学&#xff0c;生怕认真学了却没学会。其实可…

PostgreSQL 优化器代码概览

简介 PostgreSQL 的开发源自上世纪80年代&#xff0c;它最初是 Michael Stonebraker 等人在美国国防部支持下创建的POSTGRE项目。上世纪末&#xff0c;Andrew Yu 等人在它上面搭建了第一个SQL Parser&#xff0c;这个版本称为Postgre95&#xff0c;也是加州大学伯克利分校版本…

spring-security登录和权限管理

spring security spring security 主要的两个功能是认证和授权 认证的大概流程&#xff1a; Username password AuthenticationFilter&#xff08;自定义usernamepassword拦截器&#xff09; UserDetailService &#xff08;查询用户密码的service接口&#xff09; Userdetail…

官宣!阿里Blink和Flink合并计划出炉

apache已公开合并计划&#xff0c;点击可阅读原文《Batch as a Special Case of Streaming and Alibabas contribution of Blink》&#xff0c;由AI前线进行了翻译。 **春节前一周&#xff0c;经过社区内部讨论&#xff0c;阿里巴巴大数据引擎 Blink 作为 Flink 的分支 正式开源…

第四章、项目整合管理【PMP】

文章目录1. 简介2. 项目整合管理涉及的方面3. 项目整合管理的过程包括2. 制定项目章程3. 制定项目章程&#xff1a;输入4. 制定项目管理计划5. 指导和管理项目工作6. 管理项目知识7. 监督项目工作8. 监控项目工作9. 实施整体变更控制10. 结束项目或阶段1. 简介 项目整合管理是…

龙芯新款处理器发布;Citrix 产品曝“惊天漏洞”,影响全球 8 万家公司; AMD发布年度5大里程碑 ……...

关注并标星星CSDN云计算 速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周两次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go铠侠&#xff08;东芝&#xff09;开发新型闪存&a…

开源SQL-on-Hadoop系统一览

引言 查询分析是大数据要解决的核心问题之一&#xff0c;而SQL作为查询分析中使用最简单、最广泛的的语言之一&#xff0c;必然而然的催生了许多支持在Hadoop上使用SQL的系统&#xff0c;这就是所谓的SQL-on-Hadoop系统&#xff0c;其中大众熟知的Hive就是最早的SQL-on-Hadoop…

PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法

PL/SQL查询时&#xff0c;如果Number(17)以上的大数&#xff0c;会显示为科学计数法 解决方法&#xff1a; TOOLS->PREFERENCES->WINDOW TYPE->SQL WINDOW下选中Number fields to_char即可。