在部署CAS单点登录到生产环境后,由于互联网网速问题影响,默认设置下偶尔会看到java.net.ConnectException: Connection timed out这样的连接超时异常信息,造成无法完成登录问题,我们可以通过增加超时时间来解决这个问题。
另外timeout还有可能是网络无法连接造成的结果,可能会遇到DNS配置不正确造成不能通过HttpURLConnection连接CAS Server,同样会有可能造成以上无法登录的结果、同样的异常信息,我们可以试用nslookup命令测试一下网络环境或者其他调试方法测试。
环境说明: JVM SUN JDK 1.5 CAS Server JA-SIG CAS Server 3.2.1 JA-SIG CAS Client for Java 3.1.1
设置超时时间(两种方式,任选一种): 1. 在JAVA应用程序启动时设置 //设置连接主机的超时时间 ms System.setProperty("sun.net.client.defaultConnectTimeout", "300000"); //设置从主机读取数据的超时时间 System.setProperty("sun.net.client.defaultReadTimeout", "300000"); 2. 在JAVA_OPTS环境变量里设置 -Dsun.net.client.defaultConnectTimeout=300000 -Dsun.net.client.defaultReadTimeout=300000 另外,如果CAS Server与客户端应用没有部置在一个WEB服务器下,我们还可以通过CAS Server里的WEB-INF\spring-configuration\applicationContext.xml文件设置超时时间,默认超时设置如下: <bean id="httpClient" class="org.jasig.cas.util.HttpClient" p:readTimeout="5000" p:connectionTimeout="5000" /> 我们把超时间设长点即可。 别忘了重启WEB服务器
原因: CAS单点登录原理图
流程解释: 当用户在浏览器中访问web应用的某个受保护的服务[S],用户的请求将被web应用重定向到CAS服务器,CAS服务器提供响应让用户登录,用户提交用户名与密码,CAS服务器收到请求处理验证,通过验证则在浏览器中重定向到原来的web应用的服务[S]同时在浏览器中生成cookie并带有一个[T]票据查询参数给[S](否则提示错误要求继续输入),web应用再次收到原来的[S]请求,此时web应用会收到一个[T]票据,web应用集成的CAS Client通过socket连接传输[S]和[T]参数到CAS服务器,CAS服务器通过[T]找到对应用的用户身份标识返回给web应用,web应用收到xml形式的用户身份标识,web应用集成的CAS Client解释出有用户身份标识,就通过了认证,整个认证流程结束。
见上图中红色框的连接,客户端应用发送S和T到CAS 取登录的用户标识(用户名)时,是通过JAVA代码用HttpURLConnection直接发送请求与接收CAS的响应信息,我们前面提到的超时也就是此处相关代码抛出的异常。 |
|