HttpServletRequest修改/添加header和cookie参数
实现功能:
所有接口经过过滤器,获取每个接口的自定义头部(token)
判断如果是app访问,则给头部设置cookie,值为自定义token的值。
即:使用过滤器实现修改请求头headers
实现步骤:
1.自定义过滤器 ModifyParametersFilter.java 并继承 OncePerRequestFilter
package com.mobile.web.common; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; /** * 自定义的过滤器, * Created by Administrator on 2017/6/19 0019. */ public class ModifyParametersFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // 修改cookie ModifyHttpServletRequestWrapper mParametersWrapper = new ModifyHttpServletRequestWrapper(request); String token = request.getHeader("token"); if (token != null && !"".equals(token)) { mParametersWrapper.putCookie("JSESSIONID", token); } // finish filterChain.doFilter(mParametersWrapper, response); } /** * 修改cookie信息 */ private class ModifyHttpServletRequestWrapper extends HttpServletRequestWrapper { private Map<String, String> mapCookies; ModifyHttpServletRequestWrapper(HttpServletRequest request) { super(request); this.mapCookies = new HashMap<>(); } void putCookie(String name, String value) { this.mapCookies.put(name, value); } public Cookie[] getCookies() { HttpServletRequest request = (HttpServletRequest) getRequest(); Cookie[] cookies = request.getCookies(); if (mapCookies == null || mapCookies.isEmpty()) { return cookies; } if (cookies == null || cookies.length == 0) { List<Cookie> cookieList = new LinkedList<>(); for (Map.Entry<String, String> entry : mapCookies.entrySet()) { String key = entry.getKey(); if (key != null && !"".equals(key)) { cookieList.add(new Cookie(key, entry.getValue())); } } if (cookieList.isEmpty()) { return cookies; } return cookieList.toArray(new Cookie[cookieList.size()]); } else { List<Cookie> cookieList = new ArrayList<>(Arrays.asList(cookies)); for (Map.Entry<String, String> entry : mapCookies.entrySet()) { String key = entry.getKey(); if (key != null && !"".equals(key)) { for (int i = 0; i < cookieList.size(); i++) { if(cookieList.get(i).getName().equals(key)){ cookieList.remove(i); } } cookieList.add(new Cookie(key, entry.getValue())); } } return cookieList.toArray(new Cookie[cookieList.size()]); } } } }
2.在web.xml中注册该过滤器:
<filter> <filter-name>ModifyParametersFilter</filter-name> <filter-class>com.xiyinli.web.common.ModifyParametersFilter</filter-class> </filter> <filter-mapping> <filter-name>ModifyParametersFilter</filter-name> <url-pattern>/*</url-pattern> <!-- 直接从客户端过来的请求以及通过forward过来的请求都要经过该过滤器 --> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
如:
参考文章:
继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用