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

转载于:https://blog.51cto.com/liyanping/1636282

login-webflow.xml初步分析相关推荐

  1. DirectUI的初步分析-转

    DirectUI的初步分析(一) 最近由于项目的需要学习了一下DirectUI方面的东西,主要借鉴的是一个国外程序员写的代码(见引用一),看了后发现它更多的是探讨一种实现的可能性和思路,和实际应用还是 ...

  2. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...

  3. linux内核的I2C子系统详解3——i2c-core.c初步分析、I2C总线的匹配机制

    以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵权,请告知删除. 5.i2c-core.c初步分析 (1)smbus代码略过:smbus是基于I2C总线发展出来的. (2)模块加载和卸 ...

  4. 驱动框架2——内核驱动框架中LED的基本情况、初步分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.内核驱动框架中LED的基本情况 1.相关文件 (1)drivers/leds目录 驱动框架规定的LED这种硬件的驱动应该待的地方. (2 ...

  5. 【2017年第3期】大数据服务三农的初步分析与探索

    孙忠富, 褚金翔, 马浚诚, 杜克明, 郑飞翔 中国农业科学院农业环境与可持续发展研究所,北京 100081 摘要:三农问题是当前中国密切关注的社会问题,大数据技术的发展为三农带来了新的机遇.首先,对 ...

  6. tomcat4 请求的处理——初步分析

    tomcat4 请求的处理--初步分析 以tomcat4为例, 每当HttpConnector的ServerSocket得到客户端的连接时,会创建一个Socket. 接下来就处理这个Socket发来的 ...

  7. 2017 Python 问卷调查结果初步分析

    Note:本文在我的个人站点同步发布:2017 Python 问卷调查结果初步分析 · Lee's Space Station,无广告,体验更好. 未经授权,禁止转载. 前言 2017 年末,PSF( ...

  8. 基于2022高考数学全国卷I概率题解题思路初步分析新冠病毒疫苗

    基于2022高考数学全国卷I概率题解题思路初步分析新冠病毒疫苗 1. 2022高考数学全国卷I概率题 2. 卡方(χ2\chi^2χ2)检验原理回顾 3. 解答2022高考数学全国卷I概率题 4. 上 ...

  9. 5-LVI-SAM源码分析_imageProjection初步分析

    2021SC@SDUSC LVI-SAM源码分析_imageProjection.cpp初步分析 文章目录 LVI-SAM源码分析_imageProjection.cpp初步分析 一.点云结构体 二. ...

最新文章

  1. react 从使用 看定义
  2. 关于异常的处理的总结
  3. html-head-body
  4. 监控linux内存,linux 监控系统资源-内存
  5. C++ 流类和流对象
  6. 在伦敦逛菜市场_我在伦敦进行岗后求职的经验教训
  7. sql语句的备份(导入、导出)
  8. matplotlib: 有关 Backend 的说明
  9. RGB和RGBA之间的转换
  10. freemarker面试_SpringBoot基础面试题
  11. 最全的数据结构和算法,不信过来看看有没有漏掉的
  12. ILSVRC2015_DET.tar.gz下载地址
  13. 如何取消360锁定上网主页
  14. 索尼中兴,平井封神?(转)
  15. 阿里直播在线人数只统计rtmp格式的播放源
  16. handsontable的核心方法
  17. SQL Server 2017下载地址、安装步骤
  18. 通州新城规划图 - 新通网http://www.xintongwang.com
  19. Java 使用dcm4che的工具类findscu查询pacs数据
  20. html的class怎么使用方法,HTML的class属性怎么用?使用方法详细总结!

热门文章

  1. Oracle补历史数据存储过程,Oracle数据库数据丢失恢复的几种方法总结
  2. struts2 ajax上传文件 file空_WordPress插件漏洞分析:WPDiscuz任意文件上传漏洞
  3. java图像膨胀_java实现的图像腐蚀、膨胀运算 | 学步园
  4. c语言向自定数组_C语言怎么向自定义函数中传入一个数组,处理完再返回新的数组?...
  5. html 自动完成,如何指定 form或 input元素是否应在HTML中启用自动完成功能?
  6. vue 指令 v-model
  7. HTTP MIME Types
  8. pillow api
  9. mysql行转列和列转行_Mysql中行转列和列转行
  10. python抛硬币代码_求助python掷硬币