posts - 1,  comments - 3,  trackbacks - 0

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

          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 >

          ???? 經(jīng)排查,發(fā)現(xiàn)是CAS java client2.1.1 與Tomcat 5.5.16配合有問題。查看log,發(fā)現(xiàn)Cas Server端解析出的service URL前后相差了一個“?”,懷疑是cas client在新版tomcat下生成 service URL時出現(xiàn)問題,檢查client代碼,定位到edu.yale.its.tp.cas.client.Util的getService方法,跟蹤了一下,發(fā)現(xiàn)
          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));
          ????????????????}

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

          ????????}

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


          FeedBack:
          # re: CAS java client2.1.1 在Tomcat5.5.16下bug的解決
          2006-07-19 10:17 | taole
          版主我按照你的方法試過 ,但是還是會出到訪問應(yīng)用程序后提示輸入驗證用戶名和密碼以后就會出現(xiàn)錯誤頁面,
          異常如下:
          *************************************
          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.
            回復(fù)  更多評論
            
          # re: CAS java client2.1.1 在Tomcat5.5.16下bug的解決
          2006-07-28 16:18 | feng
          暈,我也遇到這個問題。如果一開始輸入 https://localhost:8443,再繼續(xù)訪問的話,一點問題都沒有。 但是如果一開始輸入 http://localhost:8080的話,就出現(xiàn)上面的問題。下載斑竹的包也無用
          郁悶  回復(fù)  更多評論
            
          # re: CAS java client2.1.1 在Tomcat5.5.16下bug的解決
          2007-05-18 14:41 | 555
          能不能帶出來參數(shù)給下面的畫面

          怎么將從數(shù)據(jù)庫里面查到的數(shù)據(jù)放在session里  回復(fù)  更多評論
            

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


          網(wǎng)站導(dǎo)航:
           
          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          搜索

          •  

          積分與排名

          • 積分 - 4107
          • 排名 - 3287

          最新評論

          主站蜘蛛池模板: 唐山市| 三河市| 长海县| 镇巴县| 望城县| 舟山市| 新干县| 平昌县| 宝清县| 临泽县| 灵川县| 墨竹工卡县| 西和县| 东辽县| 鲁山县| 祁阳县| 盐亭县| 定结县| 澄城县| 东安县| 柘城县| 湖北省| 江门市| 定陶县| 铅山县| 故城县| 上林县| 讷河市| 盐山县| 湘潭县| 济源市| 澎湖县| 昭平县| 资中县| 浮山县| 田阳县| 田林县| 安龙县| 仙居县| 阜宁县| 福泉市|