內部邀請碼: C8E245J (不寫邀請碼,沒有現金送)
國內私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統掛牌的公眾公司,股票代碼為430719,為“中國PE第一股”,市值超1000億元。
上一部分主要是對webflow同spring MVC進行結合進行了粗略的講解。這里,將對webflow定義的流程進行更加詳細的說明。
前面說到用戶的認證請求經過spring MVC 對應配置的/login 路徑進入webflow中的viewLoginForm 也就是登錄界面。該用戶的登錄界面通過
<transition on="submit" bind="true" validate="true" to="realSubmit"> <set name="flowScope.credentials"value="credentials" /> <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext,flowScope.credentials)" /> </transition>
用戶點擊登錄之后,就將登錄請求提交到了realSubmit中。realSubmit執行的對應的是AuthenticationViaFormAction中的submit方法。在該方法中,首先通過
final String ticketGrantingTicketId =WebUtils.getTicketGrantingTicketId(context);
判斷用戶請求中,是否存在TGT(Ticket grant ticket)。這里說明一下,TGT是以cookie形式存在CASServer域下的。默認情況是只有http請求才向CASServer提交的。該cookie為CASServer識別用戶是否登錄的唯一標示。如果存在,則認為是用戶已經登陸過的,否則認為用戶是沒有登錄過的。
然后一下方法獲取service:
final Service service =WebUtils.getService(context);
這個service是對應的服務。就是在你訪問某個應用程序的時候,該請求被統一認證的過濾器攔截之后跳轉到統一認證進行認證。跳轉的過程中,會把你之前的請求的路徑記錄下來並作為參數傳遞到統一認證。在統一認證系統中配置的所有可以使用統一認證系統的業務系統的配置信息。該認證請求到了統一認證之后,統一認證根據這個路徑查找對應的系統的配置信息。詳情參照系統管理部分。
如果不存在TGT,則通過下面方法新生成一個TGT。
String tempTGT= this.centralAuthenticationService.createTicketGrantingTicket(credentials);
如果TGT存在,則生成ST並將其放入到context中。ST是service ticket的縮寫。顧名思義,該ticket是和service對應的。所以,如果驗證ticket有效性的時候,發送的驗證請求所帶service參數同生成ST的時候的參數不一致,就會出現ticket異常。默認的,ST的有效性是有時間和次數的限制的。默認是ST使用一次就失效,在1000秒以后失效。詳情參見《CAS中ticket的生成與管理》。
final String serviceTicketId = this.centralAuthenticationService.grantServiceTicket(ticketGrantingTicketId, service,credentials); WebUtils.putServiceTicketInRequestScope(context, serviceTicketId); putWarnCookieIfRequestParameterPresent(context); return "warn";
在webflow中跳轉到“warn”狀態,該狀態中主要是驗證流程中是否存在warnCookie,如果存在,則跳轉到showWarningView中,否則進入redirect。在往下就是跳轉到認證之前的目標路徑了。注意,這里跳轉的過程中,將ST作為跳轉路徑中的一個參數進行傳遞了。