文档章节

cas server端的login-webflow详细流程

郑州-小万
 郑州-小万
发布于 2015/06/02 18:48
字数 965
阅读 186
收藏 1

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 '' &amp;&amp; externalContext.requestParameterMap['gateway'] neq null &amp;&amp; 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 '' &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,同时检查是否有警告信息,然后进行重定向到用户最开始请求的地址。

至此,springMVC与webflow整合以及登录整个流程已经讲解完毕。

备注:

在开发的时候如果遇到不懂的问题,可以直接去看一下cas中的源码里面的内容可以参考一下。

© 著作权归作者所有

上一篇: 图片盖章
下一篇: lucence总结
郑州-小万

郑州-小万

粉丝 6
博文 93
码字总数 25037
作品 0
郑州
程序员
私信 提问
jasig CAS登录验证分析

jasig CAS登录验证分析: 之前文章讲到了怎么利用jasig CAS实现sso: http://my.oschina.net/indestiny/blog/200768 本文对jasig CAS验证过程做个简单的分析,便于以后能够更好定制自己的CAS...

ihaolin
2014/02/23
3.5K
9
CAS 客户端以及服务端的基本配置

客户端 web.xml 片段: Xml代码 ... <filter> <filter-name>CAS Authentication Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-c......

罗文浩
2016/03/24
171
0
CAS服务端redis集群搭建

注:cas4.0.x+Tomcat7+Jdk7+redis3.0 CAS中的票据默认是存储在TicketRegistry中的,若是想要实现CAS服务端的集群,首先要做的是将票据共享到缓存中。 1.实现AbstractDistributedTicketRegist...

战五渣
2016/10/15
364
1
CAS系列[0] - CAS介绍

CAS介绍 CAS是一个企业级的单点登录框架,全称Central Authentication Service,它提供了全面的单点登录解决方案,可以满足于大多数应用场景,以下是官方的介绍 : Java (Spring Webflow/MVC...

BenjaminMa
2016/11/02
2
0
cas加入验证码以及强制密码到期修改流程

以下为手动改配置文件的配置。 配置文件: 一:cas-servlet.xml,路径:cas/WEB-INF。这个是cas的MVC的配置文件,找到handlerMappingC这个bean,在其<props></props>标签中加入两行配置,分别...

Catelyn
2013/12/05
2.1K
21

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.6K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部