这两天研究cas,自定义验证以及返回自定义的数据。发现一个问题:
每次启动cas服务器,第一次登陆总是登陆失败,有两个反应:
1,从子系统过来的,点击登陆之后不显示任何提示,过一会儿重新刷新了登陆页面,再登陆就ok了
2,直接访问cas的login,后台报错是
java.lang.IllegalStateException: Cannot create a session after the response has been committed
页面反应是:CAS is Unavailable
There was an error trying to complete your request. Please notify your support desk or try again.
然后我以为是自己改造错了,一步一步重新来,试了好多次才发现,第一登陆的时候 访问数据库连接,这时候初始化连接比较慢,使用的是spring的jdbc:
UserInfo userInfo=userInfoServiceImpl.loginGetByUserId(userName);
这个Credentials耗时比较长,所以出现那个问题。
为了进一步证明是Credentials耗时长造成的问题,我写了一个简单的Credentials,直接return true/false; 没有问题,然后我给return前面加了Thread.sleep(10000)之后,每次都是上面的问题,登陆不过去。
在网上搜了对时间的一些设置。如下:
ticketExpirationPolicies.xml
<bean id="serviceTicketExpirationPolicy" class="org.jasig.cas.ticket.support.MultiTimeUseOrTimeoutExpirationPolicy"
c:numberOfUses="2" c:timeToKill="${st.timeToKillInSeconds:100}" c:timeUnit-ref="SECONDS"/>
<!-- TicketGrantingTicketExpirationPolicy: Default as of 3.5 -->
<!-- Provides both idle and hard timeouts, for instance 2 hour sliding window with an 8 hour max lifetime -->
<bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.TicketGrantingTicketExpirationPolicy"
p:maxTimeToLiveInSeconds="${tgt.maxTimeToLiveInSeconds:28800}"
p:timeToKillInSeconds="${tgt.timeToKillInSeconds:27000}"/>
applicationContext.xml
<bean id="httpClient" class="org.jasig.cas.util.HttpClient"
p:readTimeout="25000"
p:connectionTimeout="25000"/>
如上设置,依然不行,希望大家帮忙看看。。。3q
------解决思路----------------------
csdn里的人屁点问题都解决不了, 就只知道贪分数,下载个东西还要积分,一点共享精神都没有。所以从来都不上。
cas-servlet.xml 配置文件
<bean id="terminateWebSessionListener" class="org.jasig.cas.web.flow.TerminateWebSessionListener"
p:serviceManagerUrl="${cas.securityContext.serviceProperties.service}"
p:timeToDieInSeconds="这边调大点,默认是2" />