使用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();
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值