Webflow配置文件分析
在WEB-INF文件夹下的login-webflow.xml是登陆流程的主要配置文件。在该文件中,定义了用户登录的整个处理流程。
首先,配置文件中的 on-start标签定义了用户第一次进入流程中的预处理动作。该标签对应spring中的id为initialFlowSetupAction的bean。查看该bean(InitialFlowSetupAction)的代码。该类需要继承自AbstractAction,AbstractAction方法是org.springframework.webflow.action包中的类。是webflow中的基础类。该类中的doExecute方法是对应处理业务的方法。就犹如servlet中的service方法一样。该方法的参数是RequestContext对象,该参数是一个流程的容器。该方法从request中获取TGT,并且构建一个临时的service对象(不同域注册的service,详情见接入系统管理)。并且,将TGT和service放在FlowScope作用域中。
流程的初始化完毕之后,就开始一系列的判断了。也就是进入decision-state节点。这些节点是依次执行的。
<!-- 检查flow中是否存在TGT如果存在,存在进入hasServiceCheck,为空进入gatewayRequestCheck -->
<decision-state id="ticketGrantingTicketExistsCheck">
<if test="flowScope.ticketGrantingTicketId neq null" then="hasServiceCheck" else="gatewayRequestCheck" />
</decision-state>
<!-- 主要是CS结构使用gatewat,暂时不研究 -->
<decision-state id="gatewayRequestCheck">
<if test="externalContext.requestParameterMap['gateway'] neq '' && externalContext.requestParameterMap['gateway'] neq null && flowScope.service neq null" then="gatewayServicesManagementCheck" else="viewLoginForm" />
</decision-state>
<!-- 存在TGT,说明用户已经登陆,测试flow中service是否为空,不为空,进入renewRequestCheck,为空,进入viewGenericLoginSuccess -->
<decision-state id="hasServiceCheck">
<if test="flowScope.service != null" then="renewRequestCheck" else="viewGenericLoginSuccess" />
</decision-state>
<!--
用户已经登陆,且请求参数中存在service 判断请求中是否存在'renew'参数,如果renew参数为空或者没有内容,那么,进入viewLoginForm,否则进入generateServiceTicket
renew参数和gateway参数不兼容。renew参数将绕过单点登录。也就是说即使用户登录了,还将要求用户登录。(等你妹啊,人家都登录了,凭什么还要让人家再登录一次)
-->
<decision-state id="renewRequestCheck">
<if test="externalContext.requestParameterMap['renew'] neq '' && externalContext.requestParameterMap['renew'] neq null" then="viewLoginForm" else="generateServiceTicket" />
</decision-state>
<decision-state id="warn">
<if test="flowScope.warnCookieValue" then="showWarningView" else="redirect" />
</decision-state>
对应的dicision-state走完之后,如果不存在TGT,其实就会进入voiwLoginForm节点。该节点是一个view-state类型的,这也就是说明该节点是一个页面,view=“casLoginView”属性定义了该view对应的页面是“casLoginView”。这个视图会被spring的视图解析器解析成/WEB-INF/view/jsp/default/ui/casLoginView.jsp页面。用户这时候就能看到一个登陆界面了。
需要注意的是,用户看到的登录界面中,会有hidden类型的一个lt参数:
<input type="hidden" name="lt" value="${flowExecutionKey}" />
该参数可以理解成每个需要登录的用户都有一个流水号。只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程。否则,没有流水号的情况下,webflow会认为用户还没有进入webflow流程,从而会重新进入一次webflow流程,从而会重新出现登录界面。
用户点击登录之后,提交到realSubmit节点。该节点执行的是authenticationViaFormAction.submit方法,在该方法中,将会验证用户的认证信息是否正确。验证成功之后,跳转到sendTicketGrantingTicket,在这里,将生成TGT,然后,进入serviceCheck,在serviceCheck中,将会验证flowScope作用域中是否存在service,如果存在,则进入generateServiceTicket,否则进入登录成功页面。在generateServiceTicket中,也将生成ST,同时检查是否有警告信息,然后进行重定向到用户最开始请求的地址。
至此,springMVC与webflow整合以及登录整个流程已经讲解完毕。
相关推荐
web.xml配置详解web.xml配置详解web.xml配置详解web.xml配置详解web.xml配置详解web.xml配置详解web.xml配置详解
java web项目 web.xml配置详解
书中重点讲解Web流、流定义语言、流执行、流的测试以及自定义扩展等精髓内容,并结合使用Spring WebFlow 1开发的实例来向读者说明如何将其实际应用到项目中。尤其弥足珍贵的是,作者从框架设计者角度深入阐述了...
Spring Web Flow 。 官网 Spring Web Flow API。 Spring Web Flow 开发文档。
spring webflow
spring web flow reference 2.4.0
spring web flow jsp 页面跳转 学习资料
spring web flow入门 swf
Spring Web Flow权威指南
spring webflow 网上书店·······················
webflow spring
《Spring Web FLow权威指南》一书很好地讲解了有关spring web flow的构建、开发以及web流的管理等,是web flow开发人员不可或缺的一本工具书。
部署描述文件 web.xml 配置详解 简单易学
Spring Web Flow 介绍.rar Spring Web Flow 介绍.rar
Spring Web Flow2入门例子,详细参考http://blog.csdn.net/xiejx618/article/details/51847050
spring webflow 官方中文版权威指南PDF,齐全的webflow目录及教程。是学习该框架的工具书
spring webflow 1.0 速查参考手册,
业务的逻辑涉及到数据的获取、传递、保存,相关的业务功能函数的调用等内容,这些功能的实现都可用 Java 代码来完成,但定义 Spring Web Flow 的语法与 Java 是无关的,这就要求 Spring Web Flow 提供与 Java 代码的...