今天在做項目的時候由於寫了一個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: