包括请求数据记录的实现方式;请求/响应包装器的概念、使用场景及具体用法;单次过滤器 OncePerRequestFilter 的特点和使用场景;AOP 三件套(AopContext、AopUtils、ReflectionUtils)的作用
以下是关于如何运用这些功能的分类说明:
请求数据记录:
- 首先创建一个
@Configuration类,如RequestLoggingConfig。 - 在类中创建
CommonsRequestLoggingFilter的实例,并设置相关属性,如setIncludeQueryString(true)、setIncludePayload(true)、setIncludeHeaders(true)、setIncludeClientInfo(true)和setAfterMessagePrefix("REQUEST DATA-")。 - 配置日志级别
DEBUG,即设置logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG。
请求/响应包装器:
- 对于请求包装器,创建一个继承自
OncePerRequestFilter的类,如RequestWrapperFilter。- 在
doFilterInternal方法中创建ContentCachingRequestWrapper对象,并处理请求数据,如获取请求体的字节数组。
- 在
- 对于响应包装器,创建一个继承自
OncePerRequestFilter的类,如ResponseWrapperFilter。- 在
doFilterInternal方法中创建ContentCachingResponseWrapper对象,处理响应数据,如获取响应体的字节数组,添加响应头,最后调用copyBodyToResponse方法将响应数据发送到客户端。
- 在
单次过滤器 OncePerRequestFilter:
通过继承OncePerRequestFilter,重写doFilterInternal方法来实现自己的过滤逻辑。
AOP 三件套:
AopContext:在需要获取当前代理对象或目标对象时使用,如在同一个类中调用代理类的方法时。AopUtils:用于判断代理类型、获取目标对象等操作。ReflectionUtils:用于进行反射操作,如使私有字段可访问、获取字段值、调用方法等。
注意:本文归作者所有,未经作者允许,不得转载