2012-06-12 89 views
1

我的應用程序使用CAS 3.4.11,Spring 3.1和Hibernate 4. 我的login-webflow.xml使用了spring-webflow-2.0.xsd,登錄流程如下,Spring webflow + CAS:AuthenticationViaFormAction類不叫

<var name="credentials" class="org.jasig.cas.authentication.principal.UsernamePasswordCredentials" /> 

    <on-start> 
    <evaluate expression="initialFlowSetupAction" /> 
    </on-start> 

    <view-state id="viewLoginForm" view="casLoginView" model="credentials"> 
    <binder> 
     <binding property="username" /> 
     <binding property="password" /> 
    </binder> 
    <on-entry> 
     <set name="viewScope.commandName" value="'credentials'" /> 
    </on-entry> 
    <transition on="submit" bind="true" validate="true" to="realSubmit"> 
     <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" /> 
    </transition> 
    </view-state> 

豆 「initialFlowSetupAction」 和 「authenticationViaFormAction」 在CAS-servlet.xml中的定義,

<bean id="initialFlowSetupAction" class="org.jasig.cas.web.flow.InitialFlowSetupAction" 
     p:argumentExtractors-ref="argumentExtractors" 
     p:warnCookieGenerator-ref="warnCookieGenerator" 
     p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"/> 

    <bean id="authenticationViaFormAction" class="org.jasig.cas.web.flow.AuthenticationViaFormAction" 
     p:centralAuthenticationService-ref="centralAuthenticationService" 
     p:warnCookieGenerator-ref="warnCookieGenerator"/> 

這裏的問題是,在initialFlowSetupAction,同時啓動登錄頁面調用。在點擊「登錄」按鈕時,應該調用AuthenticationViaFormAction類的綁定/提交方法。但是總是調用InitialFlowSetupAction並且窗體重新顯示而沒有任何異常。至少我可以跟蹤是否有例外。

它可以是與表單的用戶名和密碼字段綁定的問題,以將其屬性設置爲UsernamePasswordCredentials?

基本上我想知道爲什麼InitialFlowSetupAction被調用onclick的「登錄」按鈕?

回答

1

可能是因爲您的表單不包含「_flowExecutionKey」字段的值。 它應該包含下一個輸入元素以便能夠恢復流程執行。

<form> 
    ... 
    <input type="hidden" name="_eventId" value="submit" /> 
    <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}" /> 
</form> 

http://static.springsource.org/spring-webflow/docs/2.0-m1/reference/flow-executor.html

在CAS 3.5.2出於某種原因字段 「執行」 是用來代替 「_flowExecutionKey」。

0

嘗試設置驗證爲假:

<transition on="submit" bind="true" validate="false" to="realSubmit">