如何修改HttpServletRequest的Headers?

简介: HttpServletRequest java

今天遇到一个问题,记录如下

需求: 需要对request的请求添加一个Header,发现没有提供新增/修改Header的方法

进入 HttpServletRequest 的源码查看,由于HttpServletRequest是一个接口,需要找到对应的实现类,才能看有没有对应的接口,进入debug查看httpServletRequest的实现类

测试代码如下:


测试结果如下:



经过测试发现实现类为

org.apache.catalina.connector.RequestFacade

而这只是一个包装类,他的内部还有一个Request对象

进入该类

org.apache.catalina.connector.Request

发现内部仍然有一个对象:

org.apache.coyote.Request

也可以通过上图的debug结果查看

org.apache.coyote.Request提供了addValue方法来修改headers属性.

经过测试可以使用反射来修改header

@GetMappingpublicvoidtestServletRequest(HttpServletRequestrequest, HttpServletResponseresponse) throwsIOException, NoSuchFieldException, InstantiationException, IllegalAccessException, ServletException {
RequestFacaderequestFacade= (RequestFacade) request;
// 反射获取request属性Fieldrequest1=requestFacade.getClass().getDeclaredField("request");
// 设置私有属性权限request1.setAccessible(true);
Objecto=request1.get(request);
// 获取coyoteRequestFieldcoyoteRequest=o.getClass().getDeclaredField("coyoteRequest");
coyoteRequest.setAccessible(true);
Objecto1=coyoteRequest.get(o);
Fieldheaders=o1.getClass().getDeclaredField("headers");
headers.setAccessible(true);
// 获取HeaderMimeHeaderso2= (MimeHeaders)headers.get(o1);
o2.addValue("Auth").setString("123");
request.getRequestDispatcher("/servletRequest/test").forward(request,response);
        }

参考文章: https://blog.csdn.net/u010698072/article/details/79973830

目录
相关文章
|
5月前
|
应用服务中间件 数据安全/隐私保护
|
5月前
|
Java 数据库连接 数据库
Request&Response(5)
Request&Response
49 0
|
5月前
|
Java 应用服务中间件 API
Request&Response(1)
Request&Response
62 0
|
5月前
|
存储 Java 应用服务中间件
Request&Response(3)
Request&Response
53 0
|
6月前
|
Java 数据库连接 数据库
Request 和 Response详解(下)
Request 和 Response详解(下)
74 1
|
11月前
|
JSON 缓存 Java
修改Request与Response中的内容
修改Request与Response中的内容
88 0
|
存储
Request和Response详解
Request和Response详解
115 0
|
Java 应用服务中间件 Apache
|
缓存 应用服务中间件 API
Request 和 Response总结
Request 和 Response总结
|
前端开发 Java 应用服务中间件
Request 和 Response详解
Request 和 Response详解