假设cas server服务地址:http://cas-server:8080/cas

cas client集成的应用地址:http://cas-client:8070/castest

cas client端:

1.用户在浏览器中访问http://cas-client:8070/castest/index.jsp
2.在castest应用判断用户没有登录,就重定向到cas server服务器,并且带有service查询参数
内容类似下面的内容:http://cas-server:8080/cas/login?service=http://cas-client:8070/castest/index.jsp

(这个cas client 的逻辑在此不详述,这个以后讨论)。

----------------------------------------------------------------------------------------

cas server 端:

1.tomcat启动,加载web.xml;
2.web.xml中加载
/WEB-INF/spring-configuration/*.xml
/WEB-INF/deployerConfigContext.xml  这些配置文件;
3.spring 自动加载cas-servlet.xml. 因为在web中配置一个名字为cas的servlet,在servlet2.5之后(好像是)会自动加载serlet名字-servlet.xml;
4.当用户访问 http://cas-server:8080/cas/login 则会调用这个在web.xml中配置的名字为cas的servlet;这个servlet调用spring dispatcher servlet,然后就进入了spring mvc;同时读取cas-servlet.xml文件;
5.调用cas-servlet.xml文件
为了从spring mvc中的请求转入spring web flow,需要进行二者的整合,所以需要配置
org.springframework.webflow.mvc.servlet.FlowHandlerMapping;
org.springframework.webflow.mvc.servlet.FlowHandlerAdapter;
具体的流程是:
客户端发送的请求,先会由 servlet 容器接收, servlet 容器会找到相应的应用程序,再根据 web.xml 的配置找到符合映射条件的 servlet 来处理。 
Spring Web MVC 中处理请求的 servlet 是 DispatcherServlet ,如果请求的路径满足 DispatcherServlet 的映射条件,
则 DispatcherServlet 会找出 Spring IoC 容器中所有的 HandlerMapping ,
根据这些 HandlerMapping 中匹配最好的 handler (一般情况下都是 controller ,即控制器)来处理请求。
当 Controller 处理完毕,一般都会返回一个 view (视图)的名字,DispatcherServlet再根据这个view的名字找到相应的视图资源返回给客户端。
搞清楚 Spring Web MVC 处理请求的流程后,基本上就可以明白要整合 Spring Web MVC 与 Spring Web Flow 所需要的配置了。
为了让客户端的请求变成执行某个 flow 的请求,要解决以下几个问题:
a.需要在某个 HandlerMapping 中配置负责处理 flow 请求的 handler (或 controller )
b.该handler (或 controller )要负责启动指定的 flow
c.flow 执行过程中以及执行完成后所涉及的视图应呈现给客户端
5.1.配置 flow executor
flowExecutor
FlowExecutor 是 Spring Web Flow 的一个核心接口,启动某个 flow,都要通过这个接口来进行。从配置角度来说,只要保证有个 FlowExecutor 就可以了, Spring Web Flow 的默认行为已经足够。
5.2配置FlowRegistry

FlowRegistry 是存放 flow 的仓库,每个定义 flow 的 XML 文档被解析后,都会被分配一个唯一的 id ,并以 FlowDefinition 对象的形式存放在 FlowResigtry 中。FlowRegistry 中注册的 flow 可能会有多个,但每个 flow 都会有 id ,没有配置的,也会有个默认值, FlowExecutor  就是通过 id 来找出要执行的 flow 。至于这个 id ,则是要由用户来指定的。在默认配置情况下,如果客户端发送了如下URL请求:

http://localhost:8080/cas/login

则从 Spring Web Flow 的角度来看,这个 URL 就表示客户想要执行一个 id 为“ login”的 flow ,于是就会在 FlowRegistry 中查找名为“ login”的 flow,由FlowExecutor负责执行。关于流(flow)的id的确定,有以下两种分配算法,如果base-path存在,那么流的id就是从base-path到流的定义文件之间的目录路径,比如说流的定义文件为/WEB-INF/views/hotels/booking/booking-webflow.xml,而base-path是/WEB-INF/views,

所以flow的id就为hotels/booking.如果base-path不存在或者流的定义文件就在base-path目录下,

那么这时flow的id就为流的定义文件名减去后缀(这里我们定义的后缀为-webflow.xml),

比如说我们的流定义文件叫login-webflow.xml,那么这时flow的id就为login。
现在进入了spring login-webflow.xml的配置文件,
6.login-webflow.xml
 其中的图片参看

cas 入门之五:cas 登录流程(上)

因为此时是初次登录,所以用户没有cookie,故也就没有tgt,但是有service,所以就进入了登录页面
 7.login-webflow.xml文件流转完成之后,会产生一个view视图,供用户前台显示,此时执行cas-servlet.xml中的builder;
 builder--->viewFactoryCreator--->viewResolver     因为cas-servelet.xml引入了/spring-configuration/propertyFileConfigurer.xml文件,而propertyFileConfigurer.xml读取了/WEB-INF/cas.properties,所以在cas-servlet.xml中viewResolver的就可以读取到cas.properties中的属性值cas.viewResolver.basename 而cas.viewResolver.basename对应的值default_views,这样就对应default_views.properties;
  8.进入classpath下的default_views.properties,
 就可以找到相应的url页面;这样就顺利的进入了登录页面/WEB-INF/view/jsp/default/ui/casLoginView.jsp;

9.登录

在casLoginView.jsp中输入用户名,密码 点击登录,在login-webflow.xml的<view-state id="viewLoginForm"进行了数据绑定,当点击登录的时候进行form提交,

执行realSubmit这个authenticationViaFormAction中submit方法,而这个authenticationViaFormAction定义在cas-servlet.xml中;
10.进入到cas-servlet.xml中找到authenticationViaFormAction,从配置中可知它引用了

/WEB-INF/spring-configuration/applicationContext.xml中的centralAuthenticationService,

这个service是中心认证的service类,这个类是认证的中心类,基本上所有的认证配置都是围绕着这个类进行的,其中最重要的是它引用了/WEB-INF/deployerConfigContext.xml中authenticationManager,
authenticationManager是认证管理器,它管理着认证的基本流程;(关于认证管理器可参看 cas 入门之四:认证管理器)
11.进入到deployerConfigContext.xml
找到authenticationManager,如何需要修改认证的方式以及认证的数据来源可以修改这个配置
12.其他的都不看了,现在我们只看当我们在
login-webflow.xml的realSubmit执行返回success时,下面的流程,
sendTicketGrantingTicket->serviceCheck->generateServiceTicket->warn->redirect
->postRedirectDecision->redirectView
<end-state id="redirectView" view="externalRedirect:${requestScope.response.url}" />
现在我们又回到了cas client客户端,返回的地址类似以下形式:

http://cas-client:8070/castest/index.jsp?jsessionid=122222222&ticket=ST-ssssssXXXXX

----------------------------------------------------------------------------------------------------------------------------

cas client端:

3.回到了cas client端

在本次回到应用端是重定向,此时cas server端完成了向用户浏览器写cookie的动作。至于cas client与cas server进行ticket校验以及返回用户信息,这个我们以后再讨论。

cas入门之六:cas 登录流程(下)相关推荐

  1. cas入门之一 cas 简介

    cas 是什么? JA-SIG 中央认证服务(Central Authentication Service简称CAS)是一个开源的企业级单点登录的 java 服务器组件.客户端有多种语言实现,包括:P ...

  2. cas 入门之八:cas 认证处理器-GENERIC

    GENERIC(普通认证) 需要增加cas-server-support-generic-3.5.2.jar 普通认证很简单,就是将你需要认证的用户名.密码对存放在cas 服务端,一种方式是直接配置在 ...

  3. 1.开源单点登录系统CAS 入门

    什么是单点登录 单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案 之一.SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应 用 ...

  4. 开源单点登录系统CAS入门

    单点登录系统CAS 目录 单点登录系统CAS 什么是单点登录? CAS 介绍 CAS 服务端部署 (1)复制war包到tomcat (2)运行tomcat (3)访问CAS登录页面 CAS服务端配置 ...

  5. CAS的详细登录流程

    上图是3个登录场景,分别为:第一次访问www.qiandu.com.第二次访问.以及登录状态下第一次访问mail.qiandu.com. 下面就详细说明上图中每个数字标号做了什么,以及相关的请求内容, ...

  6. cas跨域单点登录原理_CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  7. CAS 实现的单点登录

    --任何的成功都不是一蹴而就,经验需要慢慢积累.沉淀! 项目里面用到了CAS单点登录,最近也简单的从应用层面简单研究了下CAS这个开源架构. 1. 基本概念:cookie, session, 会话co ...

  8. CAS+SSO配置单点登录完整案例

    CAS+SSO配置单点登录完整案例 目录 CAS+SSO配置单点登录完整案例 部署环境 环境说明 安全证书配置 1.打开cmd命令窗口(管理员身份打开) 2.生成证书,在cmd窗口输入以下命令: 3. ...

  9. cas入门之二spring配置文件

    从cas 3.2版本开始,cas支持spring的配置,所有关于spring的配置信息只需放入WEB-INF/spring-configuration目录即可,cas启动时会自动加载.这个目录下的sp ...

最新文章

  1. 使用logrotate管理nginx日志文件
  2. php upload ctf,强网杯CTF防御赛ez_upload Writeup
  3. 最近开机老是弹出网银插件的问题
  4. recv, recvfrom, recvmsg
  5. flutter ios打包_使用 Travis CI 为 Flutter 项目打包 Android/iOS 应用
  6. Idea+springcloud+zookeeper做的服务发现和远程连接zookeeper
  7. 微课|中学生可以这样学Python(例8.21):选择法排序
  8. C++基础——有关引用的问题
  9. 30岁学python有前途吗-为什么做大数据一定要学Python?
  10. NSArray 的遍历
  11. 使用Xshell连接Linux虚拟机
  12. mmdetection学习之anchor_generator
  13. 微信小程序实例教程(三)
  14. 耗时一个月,总结的Linux C++后台开发学习路线(已签腾讯sp,附学习资料)
  15. Jira管理员配置手册
  16. 惯导平台稳定系统matlab仿真研究,惯导平台稳定系统MATLAB仿真研究
  17. 魅族的usb计算机连接无法使用,魅族16怎么连接电脑 魅族手机连接电脑无法识别...
  18. 6月13日云栖精选夜读:数梦工场完成A轮7.5亿融资 三个维度构建“新型互联网”
  19. 《 ERP高级计划》书的解读之零物料约束和能力约束逻辑(蔡颖)(转)
  20. adblock 屏蔽网站广告 免费

热门文章

  1. Push failed Unable to access ‘https://github.com/‘: Failed to connect to github.com port 443: Timed
  2. 【d3dx9_42.dll下载】d3dx9_42.dll如何修复
  3. LearnOpenGL_study -- 光照贴图
  4. 编程使用mac还是windows
  5. Mac OSX下使用VMware Fusion 配置静态IP 图文教程指南
  6. Spark mlib KMeans聚类算法
  7. [考研408]数据结构算法题——快速排序模板
  8. 吉林大学正版matlab2020b安装教程(windows)
  9. 宇视钉钉智联门禁能否关闭测温?
  10. bp神经网络预测模型优点,什么是BP神经网络模型?