posts - 1,  comments - 3,  trackbacks - 0

          ???? 最近在項目中集成了CAS 結合Acegi來作單點登陸。感覺CAS雖然簡單,用起來還是很爽的。不過前幾天發布一個子系統的時候出現了下面的問題。

          edu.yale.its.tp.cas.client.CASAuthenticationException:?Unable?to?validate?ProxyTicketValidator
          ????
          < cas:authenticationFailure?code = ' INVALID_SERVICE ' >
          ????????ticket?
          ' ST-74-yBBJRjb3qnFle0Ynhq7sgUsdaox9nPoFbGu-20 ' ?does?not?match?supplied?service
          ????
          </ cas:authenticationFailure >

          ???? 經排查,發現是CAS java client2.1.1 與Tomcat 5.5.16配合有問題。查看log,發現Cas Server端解析出的service URL前后相差了一個“?”,懷疑是cas client在新版tomcat下生成 service URL時出現問題,檢查client代碼,定位到edu.yale.its.tp.cas.client.Util的getService方法,跟蹤了一下,發現
          if?(request.getQueryString()?!=?null)?
          ????????
          {
          ????????????
          //?first,?see?whether?we've?got?a?'ticket'?at?all
          ????????????int?ticketLoc?=?request.getQueryString().indexOf("ticket=");

          ????????????
          //?if?ticketLoc?==?0,?then?it's?the?only?parameter?and?we?ignore
          ????????????
          //?the?whole?query?string

          ????????????
          //?if?no?ticket?is?present,?we?use?the?query?string?wholesale
          ????????????if?(ticketLoc?==?-1)
          ????????????????sb.append(
          "?"?+?request.getQueryString());
          ????????????
          else?if?(ticketLoc?>?0)?
          {
          ????????????????ticketLoc?
          =?request.getQueryString().indexOf("&ticket=");
          ????????????????
          if?(ticketLoc?==?-1)?
          ????????????????
          {
          ????????????????????
          //?there?was?a?'ticket='?unrelated?to?a?parameter?named
          ????????????????????
          //?'ticket'
          ????????????????????sb.append("?"?+?request.getQueryString());
          ????????????????}
          ?else?if?(ticketLoc?>?0)?
          ????????????????
          {
          ????????????????????
          //?otherwise,?we?use?the?query?string?up?to?"&ticket="
          ????????????????????sb.append("?"
          ????????????????????????????
          +?request.getQueryString().substring(0,?ticketLoc));
          ????????????????}

          ????????????}

          ????????}

          發現對于沒有參數的http請求,request.getQueryString()函數在Tomcat5.5.15中是返回null,而5.5.16中是返回""。到這里問題就清楚了,看來yale的這幫學生代碼寫得還是有點業余呀,直接加上對空string判斷的邏輯,問題解決。
          ???????這個bug我已經提交到cas的jira上了,應該很快可以fix了,在新版本client沒有發布前,可以使用附件壓縮包中的jar替換casclient.jar。
          casclient.zip
          posted on 2006-04-04 09:30 zhangwh6882 閱讀(3980) 評論(3)  編輯  收藏 所屬分類: SSO


          FeedBack:
          # re: CAS java client2.1.1 在Tomcat5.5.16下bug的解決
          2006-07-19 10:17 | taole
          版主我按照你的方法試過 ,但是還是會出到訪問應用程序后提示輸入驗證用戶名和密碼以后就會出現錯誤頁面,
          異常如下:
          *************************************
          HTTP Status 500 -

          --------------------------------------------------------------------------------

          type Exception report

          message

          description The server encountered an internal error () that prevented it from fulfilling this request.

          exception

          javax.servlet.ServletException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://xufei:8443/cas/proxyValidate">https://xufei:8443/cas/proxyValidate] ticket=[ST-2-cHE06v0KjLXrd2YOwdbTQAM2hsZeCZfauiz-20] service=[http%3A%2F%2Fxufei%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
          edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:381)
          filters.ExampleFilter.doFilter(ExampleFilter.java:101)


          root cause

          edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://xufei:8443/cas/proxyValidate">https://xufei:8443/cas/proxyValidate] ticket=[ST-2-cHE06v0KjLXrd2YOwdbTQAM2hsZeCZfauiz-20] service=[http%3A%2F%2Fxufei%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
          edu.yale.its.tp.cas.client.CASReceipt.getReceipt(CASReceipt.java:52)
          edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:455)
          edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)
          filters.ExampleFilter.doFilter(ExampleFilter.java:101)


          note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
            回復  更多評論
            
          # re: CAS java client2.1.1 在Tomcat5.5.16下bug的解決
          2006-07-28 16:18 | feng
          暈,我也遇到這個問題。如果一開始輸入 https://localhost:8443,再繼續訪問的話,一點問題都沒有。 但是如果一開始輸入 http://localhost:8080的話,就出現上面的問題。下載斑竹的包也無用
          郁悶  回復  更多評論
            
          # re: CAS java client2.1.1 在Tomcat5.5.16下bug的解決
          2007-05-18 14:41 | 555
          能不能帶出來參數給下面的畫面

          怎么將從數據庫里面查到的數據放在session里  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2006年7月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          搜索

          •  

          積分與排名

          • 積分 - 4103
          • 排名 - 3286

          最新評論

          主站蜘蛛池模板: 郧西县| 红桥区| 宜宾县| 平阳县| 雷波县| 新昌县| 万州区| 革吉县| 宣威市| 开封县| 江都市| 吉林市| 建阳市| 喀喇沁旗| 日喀则市| 仪征市| 华池县| 利川市| 呼图壁县| 巍山| 凤凰县| 阜康市| 和龙市| 安宁市| 买车| 庆元县| 全州县| 岑巩县| 额尔古纳市| 松原市| 宁海县| 会昌县| 浮梁县| 怀集县| 苍溪县| 嘉荫县| 山西省| 额敏县| 孝感市| 南陵县| 志丹县|