cas入门之六:cas 登录流程(下)
假设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 登录流程(下)相关推荐
- cas入门之一 cas 简介
cas 是什么? JA-SIG 中央认证服务(Central Authentication Service简称CAS)是一个开源的企业级单点登录的 java 服务器组件.客户端有多种语言实现,包括:P ...
- cas 入门之八:cas 认证处理器-GENERIC
GENERIC(普通认证) 需要增加cas-server-support-generic-3.5.2.jar 普通认证很简单,就是将你需要认证的用户名.密码对存放在cas 服务端,一种方式是直接配置在 ...
- 1.开源单点登录系统CAS 入门
什么是单点登录 单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案 之一.SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应 用 ...
- 开源单点登录系统CAS入门
单点登录系统CAS 目录 单点登录系统CAS 什么是单点登录? CAS 介绍 CAS 服务端部署 (1)复制war包到tomcat (2)运行tomcat (3)访问CAS登录页面 CAS服务端配置 ...
- CAS的详细登录流程
上图是3个登录场景,分别为:第一次访问www.qiandu.com.第二次访问.以及登录状态下第一次访问mail.qiandu.com. 下面就详细说明上图中每个数字标号做了什么,以及相关的请求内容, ...
- cas跨域单点登录原理_CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- CAS 实现的单点登录
--任何的成功都不是一蹴而就,经验需要慢慢积累.沉淀! 项目里面用到了CAS单点登录,最近也简单的从应用层面简单研究了下CAS这个开源架构. 1. 基本概念:cookie, session, 会话co ...
- CAS+SSO配置单点登录完整案例
CAS+SSO配置单点登录完整案例 目录 CAS+SSO配置单点登录完整案例 部署环境 环境说明 安全证书配置 1.打开cmd命令窗口(管理员身份打开) 2.生成证书,在cmd窗口输入以下命令: 3. ...
- cas入门之二spring配置文件
从cas 3.2版本开始,cas支持spring的配置,所有关于spring的配置信息只需放入WEB-INF/spring-configuration目录即可,cas启动时会自动加载.这个目录下的sp ...
最新文章
- 使用logrotate管理nginx日志文件
- php upload ctf,强网杯CTF防御赛ez_upload Writeup
- 最近开机老是弹出网银插件的问题
- recv, recvfrom, recvmsg
- flutter ios打包_使用 Travis CI 为 Flutter 项目打包 Android/iOS 应用
- Idea+springcloud+zookeeper做的服务发现和远程连接zookeeper
- 微课|中学生可以这样学Python(例8.21):选择法排序
- C++基础——有关引用的问题
- 30岁学python有前途吗-为什么做大数据一定要学Python?
- NSArray 的遍历
- 使用Xshell连接Linux虚拟机
- mmdetection学习之anchor_generator
- 微信小程序实例教程(三)
- 耗时一个月,总结的Linux C++后台开发学习路线(已签腾讯sp,附学习资料)
- Jira管理员配置手册
- 惯导平台稳定系统matlab仿真研究,惯导平台稳定系统MATLAB仿真研究
- 魅族的usb计算机连接无法使用,魅族16怎么连接电脑 魅族手机连接电脑无法识别...
- 6月13日云栖精选夜读:数梦工场完成A轮7.5亿融资 三个维度构建“新型互联网”
- 《 ERP高级计划》书的解读之零物料约束和能力约束逻辑(蔡颖)(转)
- adblock 屏蔽网站广告 免费
热门文章
- Push failed Unable to access ‘https://github.com/‘: Failed to connect to github.com port 443: Timed
- 【d3dx9_42.dll下载】d3dx9_42.dll如何修复
- LearnOpenGL_study -- 光照贴图
- 编程使用mac还是windows
- Mac OSX下使用VMware Fusion 配置静态IP 图文教程指南
- Spark mlib KMeans聚类算法
- [考研408]数据结构算法题——快速排序模板
- 吉林大学正版matlab2020b安装教程(windows)
- 宇视钉钉智联门禁能否关闭测温?
- bp神经网络预测模型优点,什么是BP神经网络模型?