cookie设置domain报异常:java.lang.IllegalArgumentException,解决tomcat因版本问题导致的domain设置异常
今天在做项目的时候由于写了一个CookieUtil工具类,其中设置了一个常量字符串用于设置cookie的域名:COOKIE_DOMAIN,因为在项目中药实现单点登录的功能,所以使用cookie进行信息的保存,这样子以实现在多个子域名上存取用户的信息,但是在项目debug的时候一直抛了个异常:
断点的位置是要将此时服务器的sessionID作为token写进cookie里面,并且将重新设置后的cookie返回。但是此步执行过后就会报错,但是步入writeLoginToken方法里面调试的时候每一步是正常的,也就是说并不能获取到这个session.getId()然后放入redis缓存中,我使用的Tomcat的版本是9.0.30版本的,也就是说此时tomcat并不支持domain设置子域名前面有".",如果是低版本的tomcat比如8.5以下的就没有问题,但是官网上现在8.0的已经废弃了:
异常如下:
java.lang.IllegalArgumentException: An invalid domain [.rmall.com] was specified for this cookie
主要是cookieProcessor导致的问题:想继续使用自己配置的高版本的tomcat集群的话就需要在自己的tomcat的配置文件中做如下修改:
在conf配置文件中修改context.xml即可:
在<Context>标签里面添加:
<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
然后重启tomcat跑项目,每个tomcat都需要做上面的修改,然后继续debug,单步到了下一句,运行成功:
在redis中能获取到该key: