使用Java实现HTTP请求头信息的日志记录与过滤

在Java Web开发中,日志记录是一个重要的环节,它可以帮助我们跟踪系统的运行状况,发现潜在的问题。对于HTTP请求来说,记录请求头信息尤其有用,因为它可以提供关于客户端环境、请求来源、以及可能的认证信息等。但是,直接记录所有头信息可能存在安全风险,比如密码等敏感信息被泄露。

下面,我们将展示一个使用Java实现的工具类LogUtils,它能够获取HTTP请求的所有头信息,并将其转换为字符串进行记录。同时,该工具类还包含了一个过滤机制,用于避免敏感信息(如密码)被记录。

 

 import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;@Slf4j
public class LogUtils {public static String getLogInfo(HttpServletRequest request, JoinPoint joinPoint, Object returnObject) {return map2String(getHeaderInfo(request));}/*** 用于获取全部头信息*/private static Map<String, String> getHeaderInfo(HttpServletRequest request) {Map<String, String> map = new HashMap<>();Enumeration headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()) {String key = (String) headerNames.nextElement();String value = request.getHeader(key);map.put(key, value);}return map;}/*** 把Map<String, String>转成String*/public static String map2String(Map<String, String> parameterMap) {Map<String, Object> map = new HashMap<>();if (null != parameterMap) {for (Map.Entry<String, String> entry : parameterMap.entrySet()) {if (!entry.getKey().toLowerCase().contains("password")) {map.put(entry.getKey(), entry.getValue());}}}return new JSONObject(map).toString();}}

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

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

相关文章

(分治算法4) leecode 105 从前序与中序遍历构建二叉树

题目描述 给定两个整数数组preorder和inorder&#xff0c;其中preorder是二叉树的先序遍历&#xff0c;inorder是同一棵树的中序遍历&#xff0c;请构造二叉树并且返回其根节点。 分治算法求解 前序遍历的第一个就是根节点&#xff0c;根据根节点的位置&#xff0c;我们可以…

celery使用 Zookeeper 或 kafka 作为broker,使用 mysql 作为 backend

背景介绍: 先贴上celery官方文档:Celery - Distributed Task Queue — Celery 5.4.0 documentation xxx项目中单点环境运行celery + redis,使用流畅,不做过多介绍。 切换高可用环境时,客户redis使用的是cluster集群,官方文档中并没有对redis cluster的支持,查看githu…

MQTT协议

MQTT协议&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的、基于发布/订阅模式的消息传输协议。以下是关于MQTT协议的清晰归纳&#xff1a; 1.协议标准&#xff1a;MQTT是ISO标准&#xff08;ISO/IEC PRF 20922&#xff09;下的消息协议。它最初由I…

Kubernetes 1.18 部署 Traefik2.0

Kubernetes 1.18部署 Traefik2.0 参考资料&#xff1a; Traefik 2.0 官方文档&#xff1a;https://doc.traefik.io/traefik/v2.0/Kubernetes 1.18.3 部署 Traefik2.0&#xff1a;https://www.cnblogs.com/heian99/p/14608414.html 1. Traefik 介绍 traefik 是一款反向代理、…

CRMEB多门店的门店后台首页路由

如何在输入 http://localhost:8080/、http://localhost:8080/store/、http://localhost:8080/custom-store/ 这三个中任意一个链接都能正确跳转到 http://localhost:8080/store/home/index 。要实这个要求&#xff0c;有两种方式&#xff1a; 重定向 const router new VueRo…

App端接口用例设计方法和测试方法

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 接口测试作为测试的重要一环&#xff0c;重点关注的是数据层面的输入输出&#xff0c;今天…

【JVM】JVisualVM的介绍、使用和GC过程

VisualVM介绍 VisualVM 是Netbeans的profile子项目&#xff0c;已在JDK6.0 update 7 中自带&#xff0c;能够监控线程&#xff0c;内存情况&#xff0c;查看方法的CPU时间和内存中的对 象&#xff0c;已被GC的对象&#xff0c;反向查看分配的堆栈(如100个String对象分别由哪几…

本征费米能级 费米-狄拉克

导带中的费米浓度 在半导体物理中&#xff0c;导带中的费米浓度 n 0 n_0 n0​ 和价带中的空穴浓度 p 0 p_0 p0​ 是描述半导体中载流子&#xff08;电子和空穴&#xff09;数量的重要参数。在热平衡状态下&#xff0c;它们之间的关系由费米-狄拉克统计给出。 公式解释 导带…

eclipse maven打包报错: 致命错误: 在类路径或引导类路径中找不到程序包 java.lang的解决

还是上来帖张图&#xff1a; 1、系统之前是运行在mac上的&#xff0c;打包一切正常&#xff0c;但是现在在win11的eclipse打包就报错了。 2、致命错误: 在类路径或引导类路径中找不到程序包 java.lang&#xff0c;上面的问题应该是找不到java中的jar中的class导致。 解决&…

【C++】模板初级

【C】模板初级 泛型编程函数模板函数模板的概念函数模板格式函数模板的原理函数模板的实例化模板参数的匹配原则 类模板类模板格式类模板的实例化 泛型编程 当我们之前了解过函数重载后可以知道&#xff0c;一个程序可以出现同名函数&#xff0c;但参数类型不同。 //整型 voi…

树形喇叭状异形创意LED显示屏正在成为设计师们手中的神来之笔

异形创意LED显示屏以其独特的形状和强大的视觉冲击效果&#xff0c;正逐渐改变着我们的视觉体验。不同于传统的矩形、平面板状的LED显示屏&#xff0c;异形屏以其形状各异、造型奇特的特点&#xff0c;为商业显示、展览展示、文旅旅游等行业带来了全新的变化。本文将重点介绍异…

解决ubuntu22.04共享文件夹问题

刚开机发现ubuntu里面的共享文件夹访问不了了 ubuntuwxy:/mnt/hgfs$ ls找了几篇博客&#xff0c;设置如下指令即可&#xff0c;记得退出当前目录重新进入刷新一下 sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid1000 仅供参考

org.eclipse.milo opcua库浏览所有节点,部分节点查看不到

org.eclipse.milo opcua库浏览所有节点&#xff0c;部分节点查看不到&#xff0c;并没有报错 前提&#xff1a;使用pom <dependency> <groupId>org.eclipse.milo</groupId> <artifactId>sdk-client</artifac…

【YOLOv8改进[注意力]】在YOLOv8中添加ECA高效通道注意力(2020.4)的实践 + 含全部代码和详细修改方式 + 手撕结构图

本文将进行在YOLOv8中添加ECA高效通道注意力的实践,助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 ECA 二 在YOLOv8中添加ECA注意力

在线兴趣教学类线上学习APP应用开发部署程序组建研发团队需要准备什么?

功能需求&#xff1a;评估你的App需要哪些功能&#xff0c;并考虑每种形式的技术能否满足这些需求综上所述&#xff0c;选择开发网页版本、小程序还是App应根据具体情况做最合适的决策。如果你的目标受众主要为移动设备用户&#xff0c;并且需要利用设备的硬件和软件能力&#…

kotlin lambda 表达式的原理、语法和详细用法

Kotlin 的 lambda 表达式是一种简洁的函数表达式&#xff0c;用于实现匿名函数。以下是 lambda 表达式的原理、语法和详细用法。 1. Lambda 表达式的原理 Lambda 表达式是一种匿名函数&#xff0c;具有以下特点&#xff1a; 可以作为参数传递给其他函数可以在函数内部定义和…

高速公路视频监控系统与车牌抓拍:EasyCVR视频监控技术助力交通道路安全监控

随着科技的不断发展&#xff0c;高速公路视频监控与车牌抓拍系统作为智能交通的重要组成部分&#xff0c;日益发挥着不可或缺的作用。这些先进的技术不仅提高了道路交通的管理效率&#xff0c;也为保障行车安全提供了新的手段。 高速公路视频监控系统的应用&#xff0c;极大地…

day6 C++

相关概念&#xff1a;保持已有类的特征&#xff0c;在原来的基础上&#xff0c;增加新的特征&#xff0c;从而构造出新的类的过程&#xff0c;称为继 Cday6 继承&#xff1a;目的 1&#xff1a;实现代码的复用性 2&#xff1a;建立父类和子类之间的联系 3&#xff1a;通过继承…

手表化身车钥匙:智慧控车,优雅随行

智能汽车时代来临&#xff0c;传统车钥匙正在逐渐被取代。HUAWEI WATCH 4 Pro及HUAWEI WATCH Ultimate系列手表配对问界M9等&#xff0c;不仅可以化身 UWB 数字车钥匙&#xff0c;无感解锁车辆&#xff0c;还可以实现智能语音控车等功能&#xff0c;让你从容出行&#xff0c;优…

使用 C# 学习面向对象编程:第 7 部分

多态性 我们在程序中使用多态的频率是多少&#xff1f;多态是面向对象编程语言的第三大支柱&#xff0c;我们几乎每天都在使用它&#xff0c;却不去想它。 这是一个非常简单的图表&#xff0c;它将解释多态性本身。 简单来说&#xff0c;我们可以说&#xff0c;只要我们重载类…