Cas20ProxyReceivingTicketValidationFilter java
繼承AbstractTicketValidationFilter,這裏有幾個模板方法。例如getTicketValidator,preFilter.服務器
onSuccessfulValidation, onFailedValidation等。大的邏輯在AbstractTicketValidationFilter的doFilter方法中,而Cas20ProxyReceivingTicketValidationFilter主要實現了父類中的模板方法。整體邏輯以下:app
Cas20ProxyReceivingTicketValidationFilter 的具體實現
post
preFilterurl
這個方法是判斷前置條件,各個子類的前置條件是各個子類本身去去決定的。spa
在本過濾器中,前置條件很簡單,參數proxyReceptor爲空或者請求uri不是以proxyReceptorUrl結尾的,則返回true,而後讀取並相應代理請求。3d
getTicketValidator代理
這個方法主要是產生TicketValidator對象,先來講說TicketValidator有什麼用。TicketValidator只有一個方法code
Assertion validate(String ticket,String service) throw TicketVaidationException;server
根據票據和service來產生Assertion對象,那麼究竟是什麼票據呢?
還記得CAS登陸整個IE過程麼,沒有登陸跳轉到CAS服務器,認證經過後ie有跳轉到須要訪問的應用,這個時候會有兩個票據產生,一個TGT票據,這個是和用戶有關的,另一個是ST票據,ST票據是經過跳轉post參數傳遞過來的,默認的參數爲ticket。那麼service是什麼呢?就是你要訪問的app的URL地址,包括url參數,好了知道了TicketValidator的做用,那麼咱們來講說怎麼建立TciketValidator對象。
根據acceptAnyProxy,allowedProxyChains,casServerUrlPrefix等參數來建立
其中casServerUrlPrefix是須要要的。
cas client 加入後出現錯誤
org.jasig.cas.client.validation.TicketValidationException: No principal was found in the response from the CAS server. 出現錯誤的緣由:查看 Cas20ProxyReceivingTicketValidationFilter的casServerUrlPrefix屬性是否配置對了