当前位置: 首页 > news >正文

invalid domain [10.230.90.11:2025] was specified for this cookie异常原因分析

概略:这个原因是因为,服务端在Cookie里设置了domain,然后tomcat本身校验cookieValue时,domain里出现了非法参数,导致抛出异常

问题描述:

前端发送请求时,服务在接口里手动设置Cookie的domain参数,然后把cookie设置HttpServletResponse。报“invalid domain [10.230.90.11:2025] was specified for this cookie”异常。

问题分析:

本地调试访问localhost:8080或者gateway经过nacos负载均衡转发请求到某一台实例时,请求地址变成ip:port。tomcat本身Rfc6265CookieProcessor方法会对cookie校验,合法的参数仅允许:[0,9]&&[a,z]&&[A,Z]&&[.,-],冒号属于非法字符,所以校验不通过。
Rfc6265CookieProcessor源码:

    private void validateDomain(String domain) {int i = 0;int prev = true;int cur = -1;for(char[] chars = domain.toCharArray(); i < chars.length; ++i) {int prev = cur;cur = chars[i];if (!domainValid.get(cur)) {throw new IllegalArgumentException(sm.getString("rfc6265CookieProcessor.invalidDomain", new Object[]{domain}));}if ((prev == 46 || prev == -1) && (cur == 46 || cur == 45)) {throw new IllegalArgumentException(sm.getString("rfc6265CookieProcessor.invalidDomain", new Object[]{domain}));}if (prev == 45 && cur == 46) {throw new IllegalArgumentException(sm.getString("rfc6265CookieProcessor.invalidDomain", new Object[]{domain}));}}if (cur == 46 || cur == 45) {throw new IllegalArgumentException(sm.getString("rfc6265CookieProcessor.invalidDomain", new Object[]{domain}));}}static {char c;for(c = '0'; c <= '9'; ++c) {domainValid.set(c);}for(c = 'a'; c <= 'z'; ++c) {domainValid.set(c);}for(c = 'A'; c <= 'Z'; ++c) {domainValid.set(c);}domainValid.set(46);domainValid.set(45);}

解决方法:

如果使用gateway网关,则可以配置:PreserveHostHeader过滤器,作用是保持原有请求信息,这样服务端就能拿到原始域名。

http://www.xdnf.cn/news/793711.html

相关文章:

  • 小黑一步步探索大模型应用:langchain中AgentExecutor的call方法初探demo(智能体调用)
  • OD 算法题 B卷【通过软盘拷贝文件】
  • C++结构体初始化方式区别
  • Windows下将Nginx设置注册安装为服务方法!
  • 爱普生有源晶振SG2520CBN在通信基站中的应用
  • UVa12298 Super Joker II
  • AI一周事件(2025年5月27日-6月2日)
  • JavaScript 递归构建树形结构详解
  • linux学习第19、20天(父子进程)
  • 选择正确的电平转换解决方案
  • HertzBeat的告警规则如何配置?
  • Flowith,有一种Agent叫无限
  • MyBatis 深度解析:高效 Java 持久层框架实践指南(基于 3.5.10)
  • 黑马程序员TypeScript课程笔记—class篇
  • windows环境下Ubuntu系统怎么重置root密码
  • 鸿蒙5.0项目开发——横竖屏切换开发
  • 深入解析 Java 中的 synchronized:从使用到底层原理的全面详解
  • C++中锁和原子操作的区别及取舍
  • 楼宇自控系统联动暖通空调:解密建筑环境舒适度提升路径
  • 域自适应 (Domain Adaptation,DA)基础
  • JS对数据类型的检测
  • TitanIDE智算版:一键开启云端算法开发环境
  • Servlet 生命周期
  • 高性能MCU的MPU与Cache优化详解
  • 线性动态规划
  • 张雪峰为9岁女儿申请40个左右商标!
  • 超声波粒度仪市场报告:行业现状、竞争格局与未来趋势分析
  • 原子操作与非原子操作
  • RTOS,其高级使用
  • TypeScript中class的两种继承方式extends和implements的对比