spring security 集成 cas单点登陆 之 【登出后无法登陆的问题】

1、问题描述:

用户输入用户名/密码 进行登陆,然后点击退出操作回到登陆页面再次进行登陆,登陆页会闪现一次并没有任何提示,这种问题出现的概率不确定,且不定时。

2、cas服务器的后台日志如下:

2017-06-30 10:53:21,567 INFO [com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN
=============================================================
WHO: audit:unknown
WHAT: http://test.cas.com:8080/educationPlatform/j_spring_cas_security_check
ACTION: SERVICE_TICKET_NOT_CREATED
APPLICATION: CAS
WHEN: Fri Jun 30 10:53:21 CST 2017
CLIENT IP ADDRESS: 192.168.25.58
SERVER IP ADDRESS: 192.168.25.58
=============================================================

SERVICE_TICKET_NOT_CREATED 票据并没有成功创建

3、cas登陆过程简单分析:

cas登录之后,产生tgt,当tgt过期之后,cas会自动消毁服务器端的tgt存根。此时发出
登出请求,应用接到这个请求,会消毁相应的session,这样就完成了登出。

4、问题分析:
查看cas源码发现 TerminateWebSessionListener.java 中有如下实现:

private int timeToDieInSeconds = 2;

if (webSession != null &&  webSession.getAttribute(DO_NOT_TERMINATE) == null) {
            logger.debug("Terminate web session {} in {} seconds", webSession.getId(), this.timeToDieInSeconds);
            // set the web session to die in timeToDieInSeconds
            webSession.setMaxInactiveInterval(this.timeToDieInSeconds);
        }

原来是cas服务器在登陆时限制了最长等待时间(默认2秒),这样当登陆超过2秒就会自动销毁session,从而重定向到登陆页面。

5、解决办法:
修改cas-servlet.xml中的terminateWebSessionListener,添加:

p:timeToDieInSeconds="${login.flow.session.time2dieSeconds:30}

修改后配置如下:

 <bean id="terminateWebSessionListener" class="org.jasig.cas.web.flow.TerminateWebSessionListener"
      p:serviceManagerUrl="${cas.securityContext.serviceProperties.service}" 
      p:timeToDieInSeconds="${login.flow.session.time2dieSeconds:30}"/>

总结:此问题网络上搜索不到解决办法,可能只有我遇到了,在此记录一下,方便他人,也方便自己!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值