起因
- 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