网站首页 > java教程 正文
介绍
Spring Mvc拦截器的作用很多,举几个例子
1.记录接口响应时间
2.判断用户是否登录
3.判断用户的权限
今天就用一个拦截器和一个awk命令,秒查线上超时接口
一个拦截器
我们要写自己的拦截器一般有两种方式。
1.实现HandlerInterceptor接口
2.继承HandlerInterceptorAdapter抽象类
我就直接继承了HandlerInterceptorAdapter抽象类,按需重写部分实现即可。
HandlerInterceptor有如下3个方法
preHandler:在controller执行之前调用
postHandler:controller执行之后,且页面渲染之前调用
afterCompletion:页面渲染之后调用,一般用于资源清理操作
写一个记录接口响应时间的拦截器
@Slf4j public class SystemInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { request.setAttribute("request-starttime", System.currentTimeMillis()); log.info("request enter:{}", request.getRequestURI()); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { Long startTime = (Long) request.getAttribute("request-starttime"); if (startTime != null) { long cost = System.currentTimeMillis() - startTime; log.info("request cost:[" + request.getRequestURI() + ", " + request.getQueryString() + "] " + cost); } } }
配置拦截器
一个awk命令
awk是一个文本处理工具,通常用于处理数据并生成结果报告
语法格式
第一种形式
awk 'BEGIN{}pattern{commands}END{}' file_name
语法格式解释
BEGIN正式处理数据之前
pattern匹配模式
{commands}匹配命令,可能多行
END处理完所有匹配数据后执行
第二种形式
standard output | awk 'BEGIN{}pattern{commands}END{}'
awk的内置变量
内置变量含义
$0整行内容
$1-$n当前行的第1-n个字段(按照指定分隔符分割后)
NF(Number Field)当前行的字段个数,也就是多少列
NR(Number Row)当前行的行号,从1开始计数
FNR(File Number Row)多文件处理时,每个文件行号单独计数,都是从0开始
FS(Field Separator)输入字段分割符。不指定默认以空格或者Tab键分割
RS(Row Separator)输入行分割符。默认回车\n
OFS(Output Field Sepatator)输出字段分割符。默认为空格
ORS(Output Row)输出行分隔符。默认为回车
FILENAME当前输入的文件名字
ARGC命令行参数个数
ARGV命令行参数数组
看一下/etc/passwd文件的内容
cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
输出文件的每行内容
awk '{print $0}' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
输出第二列内容
需要指定分隔符:
awk 'BEGIN{FS=":"}{print $2}' /etc/passwd x x x
不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格+一个tab键)
show.txt文件内容如下
# 空格分隔 python java php # tab键分隔 flink hadoop storm
awk '{print $1}' show.txt
输出如下:
python flink
拦截器和awk命令都介绍完毕。
grep 'request cost' xxx.log | awk ' $7 >1000 {print $0}' \
上面这个命令就是打印xxx.log中接口响应时间超过1s的日志,相信经过前面的介绍,你已经看懂了
效果演示
省略了部分内容
[INFO] request cost:[/api/message/getKfConversation, null] 1005 [INFO] request cost:[/api/kf/meet, null] 1004
猜你喜欢
- 2024-11-04 【快学springboot】12.实现拦截器
- 2024-11-04 Spring Boot 中的拦截器和过滤器到底有什么区别?
- 2024-11-04 SpringBoot中的过滤器和拦截器有什么区别?
- 2024-11-04 为什么你写的拦截器注入不了Java bean?
- 2024-11-04 使用Spring Cloud Zuul实现过滤器或拦截器功能案例
- 2024-11-04 java服务-springboot拦截器实现用户登录Token及权限校验
- 2024-11-04 JAVAEE就业工程师教程之第4章 Struts2拦截器
- 2024-11-04 Spring框架功能分为哪些模块?(spring框架有哪几部分组成)
- 2024-11-04 高级码农Spring Boot实战进阶之过滤器、拦截器的使用
- 2024-11-04 轻量级 Java 权限认证框架Sa-Token初体验(五)
你 发表评论:
欢迎- 最近发表
-
- 一招解决vscode报java插件版本不一致以及相关缓存引起的问题
- 关于Java 8版本的理解(java中的接口怎么理解)
- Java 9 到 Java 16 的版本演进:一次模块化革命和语言的持续进化
- 如何选择合适的Java版本(如何选择jdk版本)
- 晚会互动小游戏(晚会节目互动小游戏)
- 基于JavaSwing的象棋游戏系统java休闲游戏jsp源代码Mysql
- Java 猜字母游戏!会写会玩才是真本事!
- 基于JavaSwing的贪吃蛇大作战java休闲游戏jsp源代码mysql
- Java & Python 康威生命游戏 - 命令行版
- 高玩随机种子无损速通《我的世界》10分钟不到刷新世界纪录
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)