SpringBoot AOP完全讲解二:统一处理请求日志
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80669451
本文出自【赵彦军的博客】
前言
不了解 AOP
概念的同学,请先看 AOP
基础文章。
SpringBoot AOP完全讲解一:基础概念
添加依赖
maven
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
gradle
compile('org.springframework.boot:spring-boot-starter-web','org.springframework.boot:spring-boot-starter-aop' )
新建切面文章
新建切面类 ControllerAspect
package com.yiba.didiapi.aop;import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;@Aspect
@Component
public class ControllerAspect {//对 com.yiba.didiapi.controller 这个包做切面@Pointcut("execution(public * com.yiba.didiapi.controller.*.*(..))")public void postController() {}@Before("postController()")public void beforePost() {//请求前处理RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();Enumeration<String> headerNames = request.getHeaderNames();//获取请求的 headerHashMap<String, String> headMap = new HashMap<>();while (headerNames.hasMoreElements()) {//以此取出头信息String headerName = headerNames.nextElement();String headerValue = request.getHeader(headerName);//取出头信息内容headMap.put(headerName, headerValue);}//获取完整的url路径:http://localhost:8083/sdk/wii/swbuStringBuffer url = request.getRequestURL();//获取请求的资源名部分:/sdk/wii/swbuString uri = request.getRequestURI();//获取请求类型:POSTString method = request.getMethod();//获取请求ip:12.45.36.23String ip = request.getRemoteAddr();System.out.println("url:" + url);System.out.println("uri:" + uri);System.out.println("method:" + method);System.out.println("ip:" + ip);headMap.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String s, String s2) {System.out.println("head name:" + s + " value:" + s2);}});//获取请求表单参数Map<String, String[]> paramsMap = request.getParameterMap();String queryString = "";for (String key : paramsMap.keySet()) {String[] values = paramsMap.get(key);for (int i = 0; i < values.length; i++) {String value = values[i];queryString += key + "=" + value + "&";}}// 去掉最后一个空格if (queryString.length() > 0) {queryString = queryString.substring(0, queryString.length() - 1);System.out.println("queryString:" + queryString);}//获取post请求的body内容try {StringBuffer sb = new StringBuffer();InputStream is = request.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));String s = "";while ((s = br.readLine()) != null) {sb.append(s);}//获取post请求的body内容System.out.println("request body:" + sb.toString());} catch (IOException e) {e.printStackTrace();}}@After("postController()")public void afterPost() {//请求后处理}}
参考资料
SpringBoot AOP统一处理请求日志
个人微信号:zhaoyanjun125 , 欢迎关注
SpringBoot AOP完全讲解二:统一处理请求日志相关推荐
- Spring Boot 学习之,AOP统一处理请求日志
AOP统一处理请求日志 AOP为Aspect Oriented Programming的缩写,意为:[面向切面编程] 理论就不说了,直接上代码吧,呵呵- 注解 用途 @Aspect 注解将一个java ...
- SpringBoot AOP完全讲解一:基础概念
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80669022 本文出自[赵彦军的博客] Aop 切面编程 aop 全称 Aspec ...
- AOP统一处理请求日志
1.添加依赖 spring-boot-starter-aop 2.建立处理文件 在访问到GirlController中方法之前,拦截所有GirlController中的方法: 只拦截gilrList方 ...
- SpringBoot基础教程2-1-6 日志规范-使用AOP统一处理Web日志
2019独角兽企业重金招聘Python工程师标准>>> 1. 概述 Web层作为服务的入口,对请求参数和响应结果的日志记录是必不可少的,本文结合AOP切面技术,统一处理Web日志. ...
- SpringBoot + AOP 统一处理日志
Springboot + AOP 统一处理日志.然后系统日志持久化到文件保存起来,当程序方便发生问题的时候,能够快速.准确的定位到问题的所在.SpringBoot + Log4j 每天输出一个日志文件 ...
- 十、springboot注解式AOP(@Aspect)统一日志管理
springboot注解式AOP(@Aspect)统一日志管理 简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功 ...
- Spring Boot中使用AOP统一处理Web请求日志
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...
- springboot aop + logback + 统一异常处理 打印日志
springboot aop + logback + 统一异常处理 打印日志 参考文章: (1)springboot aop + logback + 统一异常处理 打印日志 (2)https://ww ...
- Springboot使用AOP记录请求日志和返回数据
首先是日志表结构 DROP TABLE IF EXISTS `protal_logvo`; CREATE TABLE `protal_logvo` (`id` varchar(255) NOT NUL ...
最新文章
- php 自动发送邮件的实现
- 【 FPGA 】组合逻辑中的竞争与险象问题(四)
- SourceTree 3.0.17如何跳过注册进行安装? — git图形化工具(一)
- 编程语言python培训-Python是什么样的编程语言?
- UI自动化之特殊处理三(日期控件\表格\富文本)
- oracle数据库,增加序列,自增序列,规定位数,不足用0补足
- vue踩坑-This relative module was not found
- Python面向对象程序设计中属性的作用与用法
- Eigen按行或列求和的使用
- 编程计算二叉树的深度
- vfpodbc.dll下载, 各版本下载,包含所有版本
- vulnhub--ALFA: 1
- ABAP-生成会计凭证
- NextCloud如何共享文件
- C语言实现万年历记事本,简单的日历记事本jQuery插件e-calendar(带样式美化)
- CSS实现文字动画效果
- ESP32小网关应用,嵌入式串口转以太网,支持蓝牙+wifi
- sqlServer简单建数据库,建表操作
- 智源青年科学家袁洋:机器学习可靠性与算法优化的方法探索
- 蓝牙学习笔记之建立蓝牙连接的过程
热门文章
- java和netbeans区别_如果我想只使用Java中的Eclipse和Netbeans有什么区别?
- 2018年秋计算机基础在线作业,《计算机应用基础》2017年的秋学期在线作业三.doc...
- 六十五、下一个更大的数系列,单调栈解决方法
- 6.29 Vue 第二天 学习笔记
- 慕尼黑工业大学最新综述:深度神经网络中的不确定性
- 冲击SuperGLUE:基于多任务与对抗训练的Finetune方案解析
- EMNLP2018论文解读 | 利用篇章信息提升机器翻译质量
- 重磅推荐 | 11个名企NLP项目,硅谷科学家帮你转型
- GAN做图像翻译的一点总结
- 综述 | 知识图谱发展概述