Spring / Spring Boot全局获取HttpServletRequest、HttpServletResponse对象

1.前言

你还在 Controller 传一个 HttpServletRequest 或 HttpServletResponse 到下面好几层以便获取到该对象进行处理吗??

那就 out 咯,曾经我也是这么做的,哈哈哈~

今天写代码想起来要获取这个对象,一下子想不起来叫什么了,只隐隐约约记得叫 HttpRequestContextHolder 来获取,但是,错了,其实是RequestContextHolder,难怪自动提示来不出来。

于是,我决定还是写个文章记录一下方便以后自己找

2.代码

java 复制代码
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
HttpServletResponse response = requestAttributes.getResponse();

比如你也可以稍微封装一下,搞一个类静态调用分别获取 Request、Response,随后你就可以在项目的任何位置调用得到这两个对象以便在请求前、返回前做一些别的处理了。

这里,我只是举个例子:

java 复制代码
public class MyServletContextHolder {

    private static ServletRequestAttributes requestAttributes = null;


    private static void lazyInit() {
        if (null == requestAttributes) {
            synchronized (MyServletContextHolder.class) {
                if (null == requestAttributes) {
                    requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                }
            }
        }
    }


    public static HttpServletRequest getHttpServletRequest() {
        lazyInit();
        return requestAttributes.getRequest();
    }


    public static HttpServletResponse getHttpServletResponse() {
        lazyInit();
        return requestAttributes.getResponse();
    }
}
相关推荐
雨中飘荡的记忆2 分钟前
Spring事件机制详解
spring
昵称为空C15 分钟前
kafka的替代品redpanda部署与SpringBoot集成使用案例
spring boot·后端·kafka
liu_bees28 分钟前
Jenkins 中修改 admin 账号密码的正确位置与方法
java·运维·tomcat·jenkins
明洞日记37 分钟前
【设计模式手册011】享元模式 - 共享细粒度对象的高效之道
java·设计模式·享元模式
G皮T1 小时前
【Java】Java 运行时数据区域(一):名词概念
java·jvm·runtime·运行时·运行时数据区域
z***y8621 小时前
Java数据挖掘开发
java·开发语言·数据挖掘
鱼锦0.01 小时前
基于spring+vue把图片文件上传至阿里云oss容器并回显
java·vue.js·spring
從南走到北1 小时前
JAVA国际版同城跑腿源码快递代取帮买帮送同城服务源码支持Android+IOS+H5
android·java·ios·微信小程序
q***09801 小时前
Spring Boot 2.7.x 至 2.7.18 及更旧的版本,漏洞说明
java·spring boot·后端
q***14641 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle