如何修改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

目录
相关文章
|
8月前
|
存储 应用服务中间件
ServletContext、request、response
ServletContext、request、response
|
8月前
|
存储 前端开发 Java
JavaWeb:Request & Response
在JavaWeb开发中,Request(请求)和Response(响应)是非常重要的概念。它们分别代表着客户端向服务器发送请求和服务器向客户端返回响应的过程。Request对象是由服务器创建的,用于封装来自客户端的请求信息。它包含了请求的HTTP方法(如GET或POST),URL,请求头部、参数等信息。你可以通过Request对象获取客户端发送的表单数据、URL参数、HTTP头部和Cookies等。Response对象则是服务器用来向客户端发送响应的工具。它包含了HTTP状态码、响应头部和响应体等信息。你可以使用Response对象设置响应的状态码、设置响应头部
114 3
 JavaWeb:Request & Response
|
JSON 缓存 Java
修改Request与Response中的内容
修改Request与Response中的内容
106 0
Zp
HttpUtils.doPost()请求,EntityUtils.toString(response.getEntity()) 时乱码
HttpUtils.doPost()请求,EntityUtils.toString(response.getEntity()) 时乱码
Zp
382 0
|
XML 存储 安全
JavaWeb之Request与Response详解
JavaWeb之Request与Response详解
295 0
JavaWeb之Request与Response详解
|
Java
Request和Response对象详解
Request和Response对象详解
227 0
Request和Response对象详解
|
应用服务中间件 容器 数据安全/隐私保护
Servlet中request请求Get和Post方法以及乱码解决
前言: 传递的请求参数如何获取 GET方式: 参数放在URI后面 POST方式: 参数放在实体内容中 后台获取前台数据方法: 核心的API: request.getParameter("参数名"); 根据参数名获取参数值(注意,只能获取一个值的参数) request.
3161 0
|
应用服务中间件 API 开发者
Servlet中response、request乱码问题解决
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80097763 一、r...
1232 0