对HttpServletRequest中的Header进行增删

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对HttpServletRequest中的Header进行增删相关的知识,希望对你有一定的参考价值。

参考技术A HttpServletRequest 中定义的对Header的操作全是只读,没有修改。

HttpServletRequest 只是一个接口,实现由Servlet容器提供。不管是任何容器,实现类,肯定是要把请求的Header存储在某个地方,于是可以通过反射来对存储 Header 的容器进行增删。

这个Controller很简单,把客户端的所有Header,以JSON形似响应给客户端。

Tomcat使用了外观模式(Facade),这个实现稍微有一点点复杂

首先是 org.apache.catalina.connector.RequestFacade 实现,它有一个 org.apache.catalina.connector.Request 的对象。这个对象又有一个 org.apache.coyote.Request 的对象,这个对象又有一个 org.apache.tomcat.util.http.MimeHeaders 字段,它就是存储了客户端请求头的容器,只要通过反射获取到这个 MimeHeaders ,对它进行修改即可。

越来越多人使用Undertow作为Servlet容器,据说性能比Tomcat要好很多

只需要把 spring-boot-starter-web 中的 spring-boot-starter-tomcat 排除,然后手动添加 spring-boot-starter-undertow 即可

它的实现就比较简单

io.undertow.servlet.spec.HttpServletRequestImpl 实现类中有一个属性对象 io.undertow.server.HttpServerExchange ,这个属性对象又包含了一个 io.undertow.util.HeaderMap , HeaderMap 就是请求Header的存储容器,反射获取它就行。

还有其他的Servlet容器,例如Jetty。只要熟悉基本的反射,实现对请求头的增删,都很简单。

原文: https://springboot.io/t/topic/3643

以上是关于对HttpServletRequest中的Header进行增删的主要内容,如果未能解决你的问题,请参考以下文章

对HttpServletRequest中的Header进行增删

Servlet中的HttpServletRequest接口

继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数

JavaWeb-Servlet笔记--- Servlet规范;Servlet接口实现类;Servlet对象生命周期;HttpServletResponse/HttpServletRequest;请求对

HttpServletRequest 对文件上传的支持

HttpServletRequest 中的 getRequestURI 和 getPathInfo 方法有啥区别?