关于cas登录,服务端重定向客户端url后跟ticket校验失败案例

事情是这样的,cas服务端集成了不同的客户端,现在A客户端在登录后,登出时,cas服务端日志如下:

 其中TGT-84是一次正常的登录,登出。

我们要关注的是TGT-85的,首先红框内的打印,记录了正常的登录,然后客户端A登出后,再次登录,下面就报ERROR

分析可得,是CentralAuthenticationServiceImpl.class里对serviceTicket和service做校验时不通过。对比报错就是serviceTicket是以Action结尾的,而客户端的请求service在Action后跟了JSESSIONID串。找到问题所在,就继续分析。

以下内容摘自网络

浏览器访问带 ?service=*** 的单点登录地址来请求登录页,在返回的Response Headers中有参数Set-Cookie,在本地cookie中设置了CASTGC,设置了cookie的有效时间。
问题就出在了这个地方,如果浏览器本地禁止了写cookie操作,那么set-cookie并不会成功;那么会话的jsessionid信息会通过url重写的方式,传送到CAS 服务端,来保持通话。 客户端禁用cookie的情况下重写URL。重写URL是用分号将jsessionid紧跟在请求地址之后,在访问参数之前的动作。

在客户端的web.xml里面添加如下配置:其中session-timeout用来设置超时时间,单位:分。

<session-config>
  <session-timeout>30</session-timeout>
  <tracking-mode>COOKIE</tracking-mode>
</session-config>

重启后,再次操作:发现JSESSIONID已经被写入Cookie

问题解决。

原文地址:https://www.cnblogs.com/justtodo/p/12896120.html