|
在部署CAS單點登錄到生產(chǎn)環(huán)境后,由于互聯(lián)網(wǎng)網(wǎng)速問題影響,默認設置下偶爾會看到java.net.ConnectException: Connection timed out這樣的連接超時異常信息,造成無法完成登錄問題,我們可以通過增加超時時間來解決這個問題。
另外timeout還有可能是網(wǎng)絡無法連接造成的結果,可能會遇到DNS配置不正確造成不能通過HttpURLConnection連接CAS Server,同樣會有可能造成以上無法登錄的結果、同樣的異常信息,我們可以試用nslookup命令測試一下網(wǎng)絡環(huán)境或者其他調(diào)試方法測試。
環(huán)境說明: 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"); //設置從主機讀取數(shù)據(jù)的超時時間 System.setProperty("sun.net.client.defaultReadTimeout", "300000"); 2. 在JAVA_OPTS環(huán)境變量里設置 -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]票據(jù)查詢參數(shù)給[S](否則提示錯誤要求繼續(xù)輸入),web應用再次收到原來的[S]請求,此時web應用會收到一個[T]票據(jù),web應用集成的CAS Client通過socket連接傳輸[S]和[T]參數(shù)到CAS服務器,CAS服務器通過[T]找到對應用的用戶身份標識返回給web應用,web應用收到xml形式的用戶身份標識,web應用集成的CAS Client解釋出有用戶身份標識,就通過了認證,整個認證流程結束。
見上圖中紅色框的連接,客戶端應用發(fā)送S和T到CAS 取登錄的用戶標識(用戶名)時,是通過JAVA代碼用HttpURLConnection直接發(fā)送請求與接收CAS的響應信息,我們前面提到的超時也就是此處相關代碼拋出的異常。 |
|
|