`

用户登录之webflow配置详解(二)

    博客分类:
  • CAS
 
阅读更多

Webflow配置文件分析

WEB-INF文件夹下的login-webflow.xml是登陆流程的主要配置文件。在该文件中,定义了用户登录的整个处理流程。

首先,配置文件中的 on-start标签定义了用户第一次进入流程中的预处理动作。该标签对应spring中的idinitialFlowSetupActionbean。查看该beanInitialFlowSetupAction)的代码。该类需要继承自AbstractActionAbstractAction方法是org.springframework.webflow.action包中的类。是webflow中的基础类。该类中的doExecute方法是对应处理业务的方法。就犹如servlet中的service方法一样。该方法的参数是RequestContext对象,该参数是一个流程的容器。该方法从request中获取TGT,并且构建一个临时的service对象(不同域注册的service,详情见接入系统管理)。并且,将TGTservice放在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 '' &amp;&amp; externalContext.requestParameterMap['gateway'] neq null &amp;&amp; flowScope.service neq null" then="gatewayServicesManagementCheck" else="viewLoginForm" />

    </decision-state>

   

    <!-- 存在TGT,说明用户已经登陆,测试flowservice是否为空,不为空,进入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 '' &amp;&amp; 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,同时检查是否有警告信息,然后进行重定向到用户最开始请求的地址。

至此,springMVCwebflow整合以及登录整个流程已经讲解完毕。
分享到:
评论
2 楼 sjbrising 2012-05-08  
刚才找了半天发现,是发到了163.有人转载,很高兴。
1 楼 sjbrising 2012-05-08  
这个文章好像是我写的。忘了发到哪了。

相关推荐

    Spring Web Flow2入门(二)

    - **webflow-javaConfig.zip**:这个压缩包包含了一个使用Java配置实现的SWF示例,你可以通过解压、构建和运行来观察其工作流程。 - **webflow-xml.zip**:这个示例则展示了如何通过XML配置文件定义和管理Flow。 ...

    SpringWebFlow学习笔记:全XML配置方式,纯流程跳转,不带有功能实现

    &lt;bean id="flowExecutor" class="org.springframework.webflow.executor.FlowExecutorImpl"&gt; ``` 2. **flow-definition-context.xml**:在这里定义流程及其状态。每个流程都有一个唯一的ID,每个状态也有自己...

    cas原理 webflow mvc ioc

    在CAS服务器端,WebFlow负责管理登录流程,其配置主要在`/WEB-INF/login-webflow.xml`文件中进行。该文件定义了一系列状态(State),包括决策状态(Decision)、动作状态(Action)、视图状态(View)和初始/最终...

    spring-webflow

    - **Stack Overflow**:使用标签 `spring-webflow` 发布问题。 **1.4 跟踪开发进度** 想要了解最新的开发进展和计划,请关注: - **GitHub**:官方代码仓库,可跟踪最新的代码提交。 - **官方博客**:发布最新的...

    Spring mvc with Web Flow

    ### Spring MVC 与 Web Flow 技术详解 #### 引言 随着软件开发技术的不断发展,Web 应用程序的需求日益复杂。为了更好地管理和控制这些应用程序的流程,Spring 框架提供了强大的支持。其中,Spring MVC 和 Spring ...

    Springwebflow

    在"webflow"压缩包中,可能包含了以下组件: - **Flow Definition XML**:定义了Flow的结构和状态转移规则。例如,`flow.xml`文件通常会包含Flow的开始状态、结束状态和其他中间状态的定义。 - **View Resolver** ...

    webFlow-springmvc-security.rar

    《Spring WebFlow、SpringMVC与Security整合应用详解》 在现代Web开发中,构建安全、灵活且可扩展的Web应用程序至关重要。本资料主要探讨了如何将Spring WebFlow、SpringMVC和Spring Security三大框架有效地整合在...

    oa.rar_webflow.rar

    《基于WebFlow的OA系统详解》 OA(Office Automation)系统是企业信息化建设中的重要组成部分,主要用于提升办公效率,优化工作流程。本资料提供了一个基于WebFlow实现的OA系统实例,包含了数据库设计、源代码以及...

    spring-webflow-reference

    ### Spring Web Flow 2 参考指南核心知识点详解 #### 引言 Spring Web Flow 是一个功能强大的框架,专门用于处理复杂的应用流程管理。它基于Spring框架构建,并且与Spring Web MVC平台无缝集成,提供了定义应用程序...

    Spring_Web_Flow

    ### Spring Web Flow 知识点详解 #### 一、Spring Web Flow 概述 Spring Web Flow 是一个基于 Spring 框架的高级流程管理框架,主要用于处理 Web 应用中的流程控制逻辑。它提供了一种声明式的流程定义方式,允许...

    web flow的购物车用例

    **Spring Web Flow 2.0 购物车用例详解** Spring Web Flow(SWF)是一个用于构建富用户交互Web应用的框架,它专注于管理应用程序中的用户导航流程。在这个购物车用例中,我们将深入探讨如何使用SWF 2.0实现一个简单...

    H3C交换机配置详解.pdf

    H3C交换机配置详解 H3C交换机是一种常见的网络设备,配置正确是确保网络稳定运行的关键。本文档将详细介绍H3C交换机的配置过程,包括用户配置、系统IP配置、DHCP客户端配置和端口配置。 一、用户配置 用户配置是H...

    H3C交换机配置详解.doc

    【H3C交换机配置详解】 H3C交换机配置是一项关键任务,它涉及到网络设备的管理和维护。本文将深入解析H3C S3600系列交换机的配置步骤和命令,涵盖用户配置、系统IP配置、DHCP客户端配置以及端口配置等多个方面。 ...

    spring mvc 教程

    4. **与Spring Security整合**:安全性的增强是Spring Web Flow 2.0的重要特点之一,通过简单的配置即可实现对用户访问权限的控制。 5. **简化配置**:官方声称2.0版本相比1.x版本减少了大约50%的XML配置代码,使得...

    让CAS支持客户端自定义登陆页面——服务器篇.docx

    创建`remoteLogin-webflow.xml`文件,定义处理远程登录的流程。流程文件的具体内容未在文档中给出,但通常会包含启动登录流程、验证用户凭证、以及与客户端交互等逻辑。 这些改动允许客户端通过自定义的登录页面...

    让CAS支持客户端自定义登陆页面----服务器篇-.pdf

    4. **创建remoteLogin-webflow.xml**:这是WebFlow配置文件,定义了自定义登录流程。由于文章没有提供完整的内容,一般来说,这个文件会包含用户登录的各个步骤,如验证用户名和密码,处理错误信息,以及重定向到...

    SpringWebFlowDemo

    **Spring Web Flow 知识点详解** Spring Web Flow(SWF)是Spring框架的一个扩展,专为构建有状态的Web应用程序而设计。它提供了一种结构化的方式来管理用户交互流程,使得开发者可以更容易地控制用户在网站上的...

    让CAS支持客户端自定义登陆页面----服务器篇--.doc

    ### 让CAS支持客户端自定义登录页面——服务器端配置详解 #### 一、背景与目的 随着企业级应用系统的不断扩展和发展,身份认证系统(如CAS)的安全性和灵活性变得尤为重要。CAS(Central Authentication Service)...

    CVE-2017-4971分析1

    在Spring Webflow中,视图状态(view states)定义了用户界面的不同阶段,而模型绑定(model bindings)则将用户的输入与应用程序的数据模型关联起来。 **漏洞复现** 要重现这个漏洞,攻击者可以构造一个包含恶意...

Global site tag (gtag.js) - Google Analytics