`
fengchong719
  • 浏览: 82878 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

CAS 浅析 - 服务端登录流程简介(一) - 相关的配置文件

    博客分类:
  • CAS
cas 
阅读更多
声明:这只是个人见解,不代表官方。
登录流程的主要在以下几个位置有配置:
1. web.xml里Servlet里的配置:
<servlet-mapping>
	<servlet-name>cas</servlet-name>
	<url-pattern>/login</url-pattern>
</servlet-mapping>

2. cas-servlet.xml 这个是webflow的配置.这个配置里面还有一些login-webflow用到的bean 的注入.
<webflow:flow-registry id="flowRegistry" flow-builder-services="builder">
        <webflow:flow-location path="/WEB-INF/login-webflow.xml" id="login" />
    </webflow:flow-registry>

3. login-webflow.xml 这是webflow的详细配置.
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/webflow
      http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

    <var name="credentials" class="org.jasig.cas.authentication.principal.UsernamePasswordCredentials" />
    <on-start>
        <evaluate expression="initialFlowSetupAction" />
    </on-start>

	<decision-state id="ticketGrantingTicketExistsCheck">
		<if test="flowScope.ticketGrantingTicketId neq null" then="hasServiceCheck" else="gatewayRequestCheck" />
	</decision-state>
    
	<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="generateLoginTicket" />
	</decision-state>
	
	<decision-state id="hasServiceCheck">
		<if test="flowScope.service != null" then="renewRequestCheck" else="viewGenericLoginSuccess" />
	</decision-state>
	
	<decision-state id="renewRequestCheck">
		<if test="externalContext.requestParameterMap['renew'] neq '' &amp;&amp; externalContext.requestParameterMap['renew'] neq null" then="generateLoginTicket" else="generateServiceTicket" />
	</decision-state>
	
	<!-- 
		The "warn" action makes the determination of whether to redirect directly to the requested
		service or display the "confirmation" page to go back to the server.
	-->
	<decision-state id="warn">
		<if test="flowScope.warnCookieValue" then="showWarningView" else="redirect" />
	</decision-state>
	
	<!-- 
	<action-state id="startAuthenticate">
		<action bean="x509Check" />
		<transition on="success" to="sendTicketGrantingTicket" />
		<transition on="warn" to="warn" />
		<transition on="error" to="generateLoginTicket" />
	</action-state>
	 -->
   
	<action-state id="generateLoginTicket">
        <evaluate expression="generateLoginTicketAction.generate(flowRequestContext)" />
		<transition on="generated" to="viewLoginForm" />
	</action-state>
    
	<view-state id="viewLoginForm" view="casLoginView" model="credentials">
        <binder>
            <binding property="username" />
            <binding property="password" />
        </binder>
        <on-entry>
            <set name="viewScope.commandName" value="'credentials'" />
        </on-entry>
		<transition on="submit" bind="true" validate="true" to="realSubmit">
            <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />
        </transition>
        	
	</view-state>
	

	<action-state id="realSubmit">
        <evaluate expression="authenticationViaFormAction.submit(flowRequestContext, flowScope.credentials, messageContext)" />
		<transition on="warn" to="warn" />
		<transition on="success" to="sendTicketGrantingTicket" />
		<transition on="error" to="generateLoginTicket" />
	</action-state>
	
	<action-state id="sendTicketGrantingTicket">
        <evaluate expression="sendTicketGrantingTicketAction" />
		<transition to="serviceCheck" />
	</action-state>

	<decision-state id="serviceCheck">
		<if test="flowScope.service neq null" then="generateServiceTicket" else="viewGenericLoginSuccess" />
	</decision-state>
	
	<action-state id="generateServiceTicket">
        <evaluate expression="generateServiceTicketAction" />
		<transition on="success" to ="warn" />
		<transition on="error" to="generateLoginTicket" />
		<transition on="gateway" to="gatewayServicesManagementCheck" />
	</action-state>

    <action-state id="gatewayServicesManagementCheck">
        <evaluate expression="gatewayServicesManagementCheck" />
        <transition on="success" to="redirect" />
    </action-state>

    <action-state id="redirect">
        <evaluate expression="flowScope.service.getResponse(requestScope.serviceTicketId)" result-type="org.jasig.cas.authentication.principal.Response" result="requestScope.response" />
        <transition to="postRedirectDecision" />
    </action-state>

    <decision-state id="postRedirectDecision">
        <if test="requestScope.response.responseType.name() eq 'POST'" then="postView" else="redirectView" />
    </decision-state>

	<!-- 
		the "viewGenericLogin" is the end state for when a user attempts to login without coming directly from a service.
		They have only initialized their single-sign on session.
	-->
	<end-state id="viewGenericLoginSuccess" view="casLoginGenericSuccessView" />

	<!-- 
		The "showWarningView" end state is the end state for when the user has requested privacy settings (to be "warned") to be turned on.  It delegates to a 
		view defines in default_views.properties that display the "Please click here to go to the service." message.
	-->
	<end-state id="showWarningView" view="casLoginConfirmView" />

    <end-state id="postView" view="postResponseView">
        <on-entry>
            <set name="requestScope.parameters" value="requestScope.response.attributes" />
            <set name="requestScope.originalUrl" value="flowScope.service.id" />
        </on-entry>
    </end-state>

	<!-- 
		The "redirect" end state allows CAS to properly end the workflow while still redirecting
		the user back to the service required.
	-->
	<end-state id="redirectView" view="externalRedirect:${requestScope.response.url}" />
	
	<end-state id="viewServiceErrorView" view="viewServiceErrorView" />
    
    <end-state id="viewServiceSsoErrorView" view="viewServiceSsoErrorView" />

	<global-transitions>
		<transition to="viewServiceErrorView" on-exception="org.springframework.webflow.execution.repository.NoSuchFlowExecutionException" />
        <transition to="viewServiceSsoErrorView" on-exception="org.jasig.cas.services.UnauthorizedSsoServiceException" />
		<transition to="viewServiceErrorView" on-exception="org.jasig.cas.services.UnauthorizedServiceException" />
	</global-transitions>
</flow>


其实了解webflow的人,根据上面的配置大概能看懂50%的流程了。
CAS 浅析 - 服务端登录流程简介(二) - login-webflow.xml简介http://feng-henry.iteye.com/blog/1545764
分享到:
评论

相关推荐

    cas-overlay-template-6.4 服务端代码

    10.CAS-redisCluster集群存储ticket(相应redis必须配置成cluster集群) 11.CAS-加密存储ticket 12.CAS-实习动态验证码 13.CAS-实习自定义登录 14.CAS-实现自定义返回用户登录信息 15.CAS-页面缓存记住我 ----------...

    单点登录服务端项目cas-server

    单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-...

    cas-overlay-template-6.1 服务端代码

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。在本文中,我们将深入探讨"cas-overlay-template-6.1 服务端代码...

    cas-server-服务端源码.zip

    4. **注销功能**:用户在任一受保护的应用上注销,CAS服务器会清除与该用户相关的TGT,从而实现所有应用的同步注销。 关于`cas-server-4.2.27`,这个版本的特性包括: 1. **安全性增强**:可能包含对安全漏洞的...

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...

    Cas5.2.6(cas-overlay-template-5.2.6)服务端

    3. **配置**:在项目中,你需要根据实际需求修改`cas.properties`或相关YAML配置文件,比如设置服务器地址、数据库连接信息、认证策略等。 4. **服务注册**:CAS需要知道哪些应用需要接入SSO,可以通过配置文件或者...

    cas-server服务端maven项目

    这是已经调整过的cas服务端,maven项目 已完成内容 登录页面已做调整 验证码功能 记住我功能 多数据源支持(根据传入参数client确定用哪个数据源和sql语句) 运行该项目 先建立sys_account表,直接导入sys_...

    CAS-4.0.3服务端登录页添加验证码的Demo

    这是我的博文http://blog.csdn.net/jadyer/article/details/46916169中的完整代码

    cas服务端-连接数据库版

    CAS(Central Authentication Service)服务端连接数据库版是一个用于集中身份验证的安全框架,它允许用户通过一个单一登录(Single Sign-On, SSO)过程访问多个应用系统。在这个版本中,CAS服务器与MySQL数据库相...

    cas-client-core-3.3.3

    CAS(Central Authentication Service)是一种基于Web的单点登录(Single Sign-On, SSO)协议,主要用于简化用户在多个应用系统间的登录流程。`cas-client-core-3.3.3` 是一个CAS客户端的核心库,它使得应用程序能够...

    cas-server-webapp-4.0.0单点登录(带超详细文档、数据连接jar包、c3p0)可运行

    单点登录 sso cas带超详细文档,包含(cas-server-webapp-4.0.0.war、c3p0-0.9.1.2.jar、cas-client-core-3.3.3.jar、cas-server-support-jdbc-4.0.0.jar、cas-server-webapp-support-4.0.0.jar、commons-logging-...

    cas-4.2.1服务端代码(内含通过gradle打包成功的war)

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。这个压缩包包含的是CAS服务器的4.2.1版本的源代码,以及使用Gradle...

    cas 普通方式和SpringBoot方式客户端 普通方式服务端

    Spring Boot提供了对CAS的支持,你可以通过添加相关依赖并在配置文件(如`application.properties`或`application.yml`)中配置CAS服务器的URL、认证端点等信息,即可轻松启用CAS SSO功能。例如: ```properties ...

    CAS服务端文件下载

    在本项目中,我们关注的是CAS服务端的文件下载部分,这意味着我们将探讨如何设置和配置CAS服务器,以便用户可以通过它安全地下载文件。 首先,CAS服务端的构建使用了Maven,这是一个广泛使用的Java项目管理和集成...

    cas-server-3.4.10-release和cas-client-3.2.1-release两个

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,用于在多应用环境中统一用户认证。这个协议由耶鲁大学开发并开源,现在由Apereo基金会维护。标题提到的"cas-server-...

    cas-overlay-template-5.3

    CAS(Central Authentication Service)是一种广泛使用的单点登录(Single Sign-On, SSO)框架,它为Web应用程序提供了统一的身份验证服务。"cas-overlay-template-5.3" 是一个基于Spring Boot构建的CAS服务器覆盖...

    cas-overlay-template-5.3.zip,可以集成springboot,亲测可用。

    在CAS术语中,"overlay"指的是一个基本CAS发行版的定制层,它允许开发人员通过修改或添加配置、资源文件以及修改默认行为来适应自己的需求,而无需直接修改CAS核心源代码。这种设计使得升级CAS时只需更新基础发行版...

    cas-server-3.4.3.1-release.zip

    总之,"cas-server-3.4.3.1-release.zip"是一个用于与Liferay 6.0.5集成的CAS服务器版本,提供了统一认证的功能,简化了用户的登录流程,提高了系统的安全性。这个压缩包包含了一整套运行和开发CAS服务器所需的所有...

    cas 系统实例 服务端配置(一)

    标题 "cas 系统实例 服务端配置(一)" 提到的是 CAS(Central Authentication Service)系统的一个服务端配置教程。CAS 是一个开源的身份验证框架,主要用于实现单一登录(Single Sign-On, SSO)。在本教程中,我们...

    cas-server-3.4.10-release和cas-client-3.2.1-release

    CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源身份验证框架,主要目的是提供单一登录(Single Sign-On,SSO)功能,使得用户在访问多个应用系统时只需要进行一次身份验证。现在我们来...

Global site tag (gtag.js) - Google Analytics