login-webflow.xml初步分析

开源的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, flowScope.credentials, messageContext)”的不同返回值跳转到不同的界面

时间: 2024-10-13 10:13:06

login-webflow.xml初步分析的相关文章

DirectUI的初步分析-转

DirectUI的初步分析(一) 最近由于项目的需要学习了一下DirectUI方面的东西,主要借鉴的是一个国外程序员写的代码(见引用一),看了后发现它更多的是探讨一种实现的可能性和思路,和实际应用还是有距离的,不过其实现还是很有意思的.在写此小结的时候又发现国内一个程序员将这个代码部分移植到WINCE下的代码(见引用二),因为平台的差异性要完全开发一个WINCE下的实际代码还是需要时间的. 由于本人GUI开发做得少,工作中有关这方面的东西主要是提供思路和方法,学习DirectUI的主要目的是为了

Irrlicht游戏引擎初步分析与研究

转载出处:http://blog.csdn.net/hellphenix/archive/2008/03/19/2198226.aspx Irrlicht游戏引擎主要是由一个名叫Nikolaus Gebhardt奥地利人所设计,是sourceforge上的一个开源项目,也是著名的开源游戏引擎.Irrlicht是一个德国神话故事中的一种动物的名字,它能够发光和飞翔,可以在大部分的沼泽地附近发现它.单词"Irrlicht"是两个德国单词("irr"意思是疯狂的:而&qu

U-BOOT-2016.07移植 (第一篇) 初步分析

U-BOOT-2016.07移植 (第一篇) 初步分析 目录 U-BOOT-201607移植 第一篇 初步分析 目录 编译和移植环境 更新交叉编译工具 1 下载arm-linux-gcc 443 2 安装arm-linux-gcc 443 安装环境Ubuntu 910 下载u-boot-201607并解压 分析顶层Makefile 1 找出目标依赖关系 2 总结 初次编译u-boot 1 配置 2 编译 分析u-boot启动流程 1 分析startS 2 分析crt0S 3 总结 1. 编译和移

Cocos2d-x 3.1 Director ActionManger Scheduler初步分析

Director游戏主循环显示Node DisplayLinkDirector继承Director override了以下方法 virtual void mainLoop() override; virtual void setAnimationInterval(double value) override; virtual void startAnimation() override; virtual void stopAnimation() override; mainLoop()是游戏主循

mysql--error150错误原因初步分析

1, 两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int(10) 和int(11) 都显示为integer.另外,你还必须确定两个字段是否一个为 SIGNED,而另一个又是UNSIGNED, 这两字段必须严格地一致匹配. 2, 你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中

010Editor 5.0.2 附注册机 附elf,dex,xml文件格式分析模板

010Editor 5.0.2附注册机附elf,dex,xml格式分析模板 010Editor是一款快速且强大的十六进制编辑器.用来编辑二进制文件.有一个友好易于使用的界面,无限次的undo和redo操作.另外还可以打印十六进制的字节或者以书签的方式标出某些重要的字节.支持二进制模板(binary template)系统. 这里,注册机是在52破解找到的,感谢一下原作者. 安装版本是在官网下载最新的5.0.2,也是我一直在用的,试用版免费用30天. 其他模板,也都是平时工作分析时常用的,在这里分

Pin截获socket系统调用初步分析

Pin截获socket系统调用初步分析 根据为知笔记中上传的Pin tool for tracing system calls,修改代码过滤出socket相关的系统调用,并进行初步的分析.主要有2点: - 过滤socket相关的系统调用 - 分析得到的系统调用参数 过滤socket相关的系统调用 socket编程中与访问网络相关的主要关注socket().accept().然后在PinTool中过滤出这两个系统调用,对他们的参数进行初步的分析.下面先看一下这两个函数: int socket(in

Netfilter之连接跟踪实现机制初步分析

Netfilter之连接跟踪实现机制初步分析 原文: http://blog.chinaunix.net/uid-22227409-id-2656910.html 什么是连接跟踪 连接跟踪(CONNTRACK),顾名思义,就是跟踪并且记录连接状态.Linux为每一个经过网络堆栈的数据包,生成一个新的连接记录项(Connection entry).此后,所有属于此连接的数据包都被唯一地分配给这个连接,并标识连接的状态.连接跟踪是防火墙模块的状态检测的基础,同时也是地址转换中实现SNAT和DNAT的

Lending Club 公司2007-2018贷款业务初步分析

数据来源:https://www.kaggle.com/wendykan/lending-club-loan-data 数据描述:LendingClub是一家美国P2P借贷公司,总部位于加利福尼亚州旧金山.这是第一个对等网络贷款人登记其产品为证券与证券交易委员会(SEC),并在二级市场上提供贷款交易.LendingClub是世界上最大的点对点借贷平台.这些文件包含 LENGDING CLUB 公司 2007-2015 年间发放的所有贷款的完整贷款数据,包括当前贷款状态(“当前”,“延迟”,“已全