解决CAS客户端验证ST票据时发生的TicketValidationException问题

来源:互联网 发布:java 局域网聊天室 编辑:程序博客网 时间:2024/05/22 06:56

最近在项目中debug验证ST票据之后返回值时,发生了ST票据验证错误的异常。
org.jasig.cas.client.validation.TicketValidationException:
Ticket ‘ST-80-FFSThMbPg2dMee3eFveu-8080’ not recognized

经过研究CAS服务器端代码发现,原来是CAS服务器的ST票据有效期时间太短,默认是10秒。开发在debug时,非常容易超过10秒,所以会发生TicketValidationException异常。

解决方法:要在CAS服务器端修改两处配置

1 修改保存在Redis或Memcached等缓存中的票据本身的有效期。
在WEB-INF/spring-configuration/ticketRegistry.xml文件中修改。

<bean id="ticketRegistry" class="com.casserver.ticket.TicketRegistry">    <constructor-arg index="0" ref="redisClient" />    <!-- TGT timeout in seconds -->    <constructor-arg index="1" value="28800" />    <!-- ST timeout in seconds 将默认时间由10秒改为 1800秒(半小时) -->    <constructor-arg index="2" value="1800" />    <!-- <property name="kryoTranscoder" ref="kryoTranscoder" /> -->  </bean>

2 修改CAS服务器本身的超时判断时间。
在WEB-INF/cas.properties中修改。也是将默认时间由10秒改为 一个大一点的数字,如1800秒(半小时)

### Service Ticket Timeout# Default sourced from WEB-INF/spring-configuration/ticketExpirationPolices.xml## Service Ticket timeout - typically kept short as a control against replay attacks, default is 10s.  You'll want to# increase this timeout if you are manually testing service ticket creation/validation via tamperdata or similar tools# st.timeToKillInSeconds=10st.timeToKillInSeconds=1800

改好之后,用postman做个测试。

测试ST验证

成功了,不再出现TicketValidationException异常了。

0 0