起因
- Java版本为1.8,Tomcat版本为8.5
- 使用cookie进行sso单点登录
- 设置域名:domain = .xxx.com
- 运行提示错误:java.lang.IllegalArgumentException: An invalid domain [.xxx.com] was specified for this cookie
原因
- Tomcat在之前版本使用的默认的处理器CookieProcessor 是LegacyCookieProcessor ,而在之后版本的实现变为了Rfc6265CookieProcessor
- LegacyCookieProcessor 主要是实现了标准RFC6265, RFC2109 和 RFC2616,而Rfc6265CookieProcessor是实现了标准RFC6265
- Rfc6265CookieProcessor拼接Domain时增加了对domain 的校验,即必须以数字或者字母开头,必须以数字或者字母结尾
部分代码如下:
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]

本文介绍了在Tomcat 8.5及以上版本中遇到的Cookie域名配置异常问题,起因是由于Tomcat从LegacyCookieProcessor升级到Rfc6265CookieProcessor导致的Domain校验问题。解决方案包括修改context.xml配置,指定使用LegacyCookieProcessor,通过SpringBoot配置容器的cookie处理器,以及设置Cookie的一级域名。


被折叠的 条评论
为什么被折叠?



