关于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

 

 

问题解决。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM