java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie
来源:互联网 发布:简单java技术分享ppt 编辑:程序博客网 时间:2024/05/17 22:14
当项目中使用单点登录功能时,通常会使用cookie进行信息的保存,这样就可以在多个子域名上存取用户信息。
比如有三个domain分别为test.com,cml.test.com,b.test.com这三个域名下的cookie是需要互相访问的。这时会在response上写入cookie信息.
Cookie cookie = new Cookie("testCookie", "test"); cookie.setDomain(".test.com"); cookie.setPath("/"); cookie.setMaxAge(36000); resp.addCookie(cookie);
这样写在tomcat8.0上是没问题的,三个域名可以共享cookie信息。但是把它放到tomcat8.5上就报错了
java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateDomain(Rfc6265CookieProcessor.java:181) at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:123) at org.apache.catalina.connector.Response.generateCookieString(Response.java:989) at org.apache.catalina.connector.Response.addCookie(Response.java:937) at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:386) at com.cml.mvc.controller.HelloWorld.str(HelloWorld.java:98) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
在tomcat8.5上是使用org.apache.tomcat.util.http.Rfc6265CookieProcessor
The standard implementation of CookieProcessor is org.apache.tomcat.util.http.Rfc6265CookieProcessor.This cookie processor is based on RFC6265 with the following changes to support better interoperability:Values 0x80 to 0xFF are permitted in cookie-octet to support the use of UTF-8 in cookie values as used by HTML 5.For cookies without a value, the '=' is not required after the name as some browsers do not sent it.The RFC 6265 cookie processor is generally more lenient than the legacy cookie parser. In particular:The '=' and '/' characters are always permitted in a cookie value.Name only cookies are always permitted.The cookie header is always preserved.No additional attributes are supported by the RFC 6265 Cookie Processor.
文档地址
在tomcat8.0上使用的是org.apache.tomcat.util.http.LegacyCookieProcessor
The standard implementation of CookieProcessor is org.apache.tomcat.util.http.LegacyCookieProcessor. Note that it is anticipated that this will change to org.apache.tomcat.util.http.Rfc6265CookieProcessor in a future Tomcat 8 release.This is the legacy cookie parser based on RFC6265, RFC2109 and RFC2616. It implements a strict interpretation of the cookie specifications. Due to various interoperability issues with browsers not all strict behaviours are enabled by default and additional options are available to further relax the behaviour of this cookie processor if required.
问题就可以定位在CookieProcessor不同实现引起的。
原因分析见下半篇博客:An invalid domain [.test.com] was specified for this cookie 原因分析
解决方法:
1.指定完整的domain信息,但是这样单点登录就会有问题了
Cookie cookie = new Cookie("testCookie", "test"); cookie.setDomain("cml.test.com"); cookie.setPath("/"); cookie.setMaxAge(36000); resp.addCookie(cookie);
2.设置为一级域名(推荐)
Cookie cookie = new Cookie("testCookie", "test"); cookie.setDomain("test.com"); cookie.setPath("/"); cookie.setMaxAge(36000); resp.addCookie(cookie);
域名问题参考文章:顶级域名和二级域名共享cookie及相互删除cookie
阅读全文
0 0
- java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie
- java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie
- java.lang.IllegalArgumentException: An invalid domain [.x.com] was specified for this cookie
- An invalid domain [.xhlgfsc.com] was specified for this cookie
- An invalid domain [.test.com] was specified for this cookie 原因分析
- java.lang.IllegalArgumentException: An invalid character [44] was present in the Cookie value
- java.lang.IllegalArgumentException: invalid value for field
- 0xC0000008: An invalid handle was specified
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- Java.lang.IllegalArgumentException: Page directive: invalid value for import
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- java.lang.IllegalArgumentException: Page directive: invalid value for import
- CButton控件:mfc自绘按钮类,1张图片显示多种状态的方法
- Spring Data MongoDB 四:基本文档修改(update)(一)
- Reset.css 样式重置
- EffectiveJava 学习总结(二)
- 架构设计:负载均衡层设计方案(3)——Nginx进阶
- java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie
- 没有标题的标题
- 学习笔记——JAVA设计模式<21>观察者模式
- 硬盘SMART信息数据结构
- 如何判断微信端
- 东北大学毕业设计(论文)全程解析
- 【Java并发编程】之四:守护线程与线程阻塞的四种情况
- 什么是句柄
- 量化进阶——多策略量化回测实录(一)