CAS 过期时间设置无效


这是由于CAS本身的一个Bug引起的 。


分析:

定时器 org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner

核心代码如下:

            final List<Ticket> ticketsToRemove = new ArrayList<Ticket>();
            final Collection<Ticket> ticketsInCache;
            ticketsInCache = this.ticketRegistry.getTickets();
            System.out.println("hello ! size:"+ticketsInCache.size() );
            for (final Ticket ticket : ticketsInCache) {
            	System.out.println(ticket.isExpired());
                if (ticket.isExpired()) {
                    ticketsToRemove.add(ticket);
                }
            }

所以  登入校验判断的时候 也要 从 this.ticketRegistry.getTickets() 里面获取。

	<on-start>
		<evaluate expression="initialFlowSetupAction" />
	</on-start>

	<decision-state id="ticketGrantingTicketExistsCheck">
		<if test="flowScope.ticketGrantingTicketId != null" then="hasServiceCheck"
			else="gatewayRequestCheck" />
	</decision-state>

	<decision-state id="hasServiceCheck">
		<if test="flowScope.service != null" then="renewRequestCheck" else="viewGenericLoginSuccess" />
	</decision-state>

在  org.jasig.cas.web.flow.InitialFlowSetupAction的方法中 ticketGrantingTicketId 是从cookiet中获取的,应改为从ticketRegistry中获取。


        context.getFlowScope().put("ticketGrantingTicketId", ticketRegistry.getTicket(this.ticketGrantingTicketCookieGenerator.retrieveCookieValue(request)));
        context.getFlowScope().put("warnCookieValue",Boolean.valueOf(this.


在 cas-servlet.xml 中,修改配置 如下:


	<bean id="initialFlowSetupAction" class="org.jasig.cas.web.flow.InitialFlowSetupAction"
		p:argumentExtractors-ref="argumentExtractors"
		p:warnCookieGenerator-ref="warnCookieGenerator"
		p:ticketRegistry-ref="ticketRegistry"
		p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator" />





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值