加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

login-webflow.xml初步分析

发布时间:2020-12-16 09:11:31 所属栏目:百科 来源:网络整理
导读:开源的CAS已经很多牛人分析过了,最近在看源码,也总结一下 在login-webflow.xml中,初次访问应用的flow轨迹是: 1 on-start evaluate expression="initialFlowSetupAction" / /on-start 2 decision-state id="ticketGrantingTicketExistsCheck" if test="fl

开源的CAS已经很多牛人分析过了,最近在看源码,也总结一下


在login-webflow.xml中,初次访问应用的flow轨迹是:


1 <on-start>

<evaluate expression="initialFlowSetupAction" />

</on-start>



2 <decision-state id="ticketGrantingTicketExistsCheck">

<if test="flowScope.ticketGrantingTicketId != null" then="hasServiceCheck" else="gatewayRequestCheck" />

</decision-state>



3 <decision-state id="gatewayRequestCheck">

<if test="requestParameters.gateway != '' and requestParameters.gateway != null and flowScope.service != null" then="gatewayServicesManagementCheck" else="generateLoginTicket" />

</decision-state>


4 <action-state id="generateLoginTicket">

<evaluate expression="generateLoginTicketAction.generate(flowRequestContext)" />

<transition on="generated" to="viewLoginForm" />

</action-state>



所以代码会执行到generateLoginTicketAction中

GenerateLoginTicketAction.java

public final String generate(final RequestContext context) {

//通过DefaultUniqueTicketIdGenerator生成loginTicket,可以通过实现接口UniqueTicketIdGenerator.java,来自己定义生成loginTicket的格式

final String loginTicket = this.ticketIdGenerator.getNewTicketId(PREFIX);

this.logger.debug("Generated login ticket " + loginTicket);

//把ticket放入FlowScope

WebUtils.putLoginTicket(context,loginTicket);

return "generated";

}

返回后,跳转到“viewLoginForm”


<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>


default_view.properties已经定义好了:casLoginView.url=/WEB-INF/view/jsp/default/ui/casLoginView.jsp

浏览器会跳转到casLoginView.jsp让用户登陆,用户在casLoginView.jsp执行submit动作时,evaluate 元素中 expression 属性所指明的表达式会被执行,即标红的部分。表达式内容执行完成后,转向id为realSubmit的state


<action-state id="realSubmit">

<evaluate expression="authenticationViaFormAction.submit(flowRequestContext,flowScope.credentials,messageContext)" />

<transition on="warn" to="warn" />

<transition on="success" to="sendTicketGrantingTicket" />

<transition on="error" to="generateLoginTicket" />

<transition on="accountDisabled" to="casAccountDisabledView" />

<transition on="mustChangePassword" to="casMustChangePassView" />

<transition on="accountLocked" to="casAccountLockedView" />

<transition on="badHours" to="casBadHoursView" />

<transition on="badWorkstation" to="casBadWorkstationView" />

<transition on="passwordExpired" to="casExpiredPassView" />

</action-state>


在realSubmit中,根据表达式“authenticationViaFormAction.submit(flowRequestContext,messageContext)”的不同返回值跳转到不同的界面

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读