SSO单点登录-填坑

/ 单点登录 / 没有评论 / 3150浏览

过程中遇到的坑如下:

1. 往jre导入证书时报错: java.io.IOException: Keystore was tampered with, or password was incorrect

报错从字面上看是导入证书时keystore错误或密码错误,遇到这个错误首先确认你的密码时候正确;如果确定密码正确但是依然报错,那么就请删除你的$JAVA_HOME\jre6\lib\security\cacerts文件;然后重新导入证书;当然删除前最好是想备份一下。

2. 登录clientOne调整到认证中心cas-server认证通过后调整回clientOne,再次登录clientTwo直接地址重定向到clientTwo并且跟了一个ticket。这时候如果你刷新结果页面报错:未能够识别出目标 'ST-41-2VcnVMguCDWJX5zHaaaD-server.huzd.com'票根

原因是:ticket默认是只能用一次的; 因此两个办法来解决这个问题A.认证后直接重定向;这样url后面不会附带ticket;B.修改ticket有效次数。综合测试我建议使用A。 具体代码修改如下: 文件路径:/WEB-INF/spring-configuration/ticketExpirationPolicies.xml

<!-- 针对方案A 在/WEB-INF/web.xml中添加如下配置-->

  <filter>
    <filter-name>CAS Validation Filter</filter-name>
    <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
                               ......
    <init-param>
      <param-name>redirectAfterValidation</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 
<!-- 针对方案B.修改代码如下 -->
<bean id="serviceTicketExpirationPolicy" 
class="org.jasig.cas.ticket.support.MultiTimeUseOrTimeoutExpirationPolicy"
 c:numberOfUses="999"  
 c:timeToKill="${st.timeToKillInSeconds:18000}" c:timeUnit-ref="SECONDS"/>

<!-- 
c:numberOfUses 表示ticket可以重复使用的次数;改大点可以解决这个问题;但是无法解决客户端1退出后刷新带tikcet的客户端2地址报错问题。
c:timeToKill 表示ticket过期时长
-->