1. CAS 的引入的前提和好处

很早期的公司,一家公司可能只有一个应用,慢慢的应用开始变多,如员工报销系统、审核系统、学习系统......

每个应用都要进行注册登录,退出的时候又要一个个退出,用户操作起来确实有点崩溃。

我们想要另一种登录体验,公司里面的应用只要一次注册,登录的时候只要一次登录,退出的时候只要一次退出,这样就完美了。

CAS 算是最普遍、最通用的单点解决方案,但如果自家公司大牛云集,也不妨依据公司业务自己造轮子。

JA-SIG CAS(Central Authentication Service)为 Web 应用系统提供了单点登录服务。它的特性包括:

一个开放和具有很好文档支持的协议;

一个Java开源服务器组件;

提供多种类型的客户端包括 Java、.Net、PHP、Perl、Apache、uPortal等;

能够与uPortal、BlueSocket、TikiWiki、 Mule、 Liferay、Moodle集成使用。

从 github 下载源码进行编译打包即可得到服务端 war,官网地址:https://www.apereo.org/projects/cas

此篇博客算是 CAS 简单入门,去掉了复杂的 HTTPS 协议、采用默认的 CAS 服务端检验方法和凭证,目的是新手能快速搭建单点环境。

在实际项目中使用时,肯定会做很多个性化的定制,如单点登陆页面、服务端用户的校验方式、会话中存储的用户对象结构等等。

2. 取消 HTTPS 协议配置的方法

由于 CAS 默认是基于 HTTPS 协议,所以需要配置服务端的 tomcat,使之支持SSL安全协议访问。

但对于初次体验的人来说,还是建议取消 CAS 默认的 HTTPS 协议,能节省很多的麻烦和配置过程。

需要进行修改的配置文件:

WEB-INF/deployerConfigContext.xml

< bean class = "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref = "httpClient" />

增加参数 p:requireSecure="false",是否需要安全验证即 HTTPS,false为不采用 如下:

< bean class = "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref = "httpClient" p:requireSecure= "false" />
WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

修改 p:cookieSecure="true" 为 p:cookieSecure="false",即不需要安全 cookie 如下: < bean id = "ticketGrantingTicketCookieGenerator" class = "org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure = "false" p:cookieMaxAge = "-1" p:cookieName = "CASTGC" p:cookiePath = "/cas" />
WEB-INF\spring-configuration\warnCookieGenerator.xml

修改 p:cookieSecure="true" 为 p:cookieSecure="false",即不需要安全 cookie 如下:

< bean id = "warnCookieGenerator" class = "org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure = "false" p:cookieMaxAge = "-1"  p:cookieName = "CASPRIVACY"  p:cookiePath = "/cas" />

3. 服务端的搭建

从 github clone 下来的源码进行编译和打包,然后将对应的 war 包放入 tomcat webapp 下启动 tomcat。

服务端默认采用的是静态账号和密码的验证方式,WEB-INF/deployerConfigContext.xml 如下。

  <bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>

这里当然可以自定义校验类(必改的地方),可以通过数据库账号密码、特殊的业务逻辑等等,只要符合 CAS 的返回值即可。

   <bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
<constructor-arg>
<map>
<!--
| IMPORTANT
| Every handler requires a unique name.
| If more than one instance of the same handler class is configured, you must explicitly
| set its name to something other than its default name (typically the simple class name).
-->
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
</map>
</constructor-arg>

4. 多应用的集成和使用

服务端搭建起来后,其他应用只需要简单的几部配置就可以轻松通过 CAS 单点进行用户的验证。

依赖对应的客户端 jar :

<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>${cas.client.version}</version>
</dependency>

配置 web.xml 如下:

    <listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener> <filter>
<description>该过滤器用于实现单点登出功能,需放在所有单点过滤器前面</description>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <filter>
<description>核心单点过滤器</description>
<filter-name>CAS Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>http://127.0.0.1:8080/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://127.0.0.1:8081/</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <filter>
<description>该过滤器负责对Ticket的校验工作,必须启用它</description>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas10TicketValidationFilter
</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://127.0.0.1:8080/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://127.0.0.1:8081/</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

到此,整个单点服务端和应用端的使用都已描述如上,已亲测可用。

CAS 单点登录【1】入门的更多相关文章

  1. CAS单点登录系统入门--分布式登录验证

    1.开源单点登录系统CAS入门 1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要 ...

  2. CAS单点登录系列之极速入门于实战教程(4.2.7)

    @ 目录 一. SSO简介 1.1 单点登录定义 1.2 单点登录角色 1.3 单点登录分类 二. CAS简介 2.1 CAS简单定义 2.2 CAS体系结构 2.3 CAS原理 三.CAS服务端搭建 ...

  3. SSO之CAS单点登录实例演示

    本文目录: 一.概述 二.演示环境 三.JDK安装配置 四.安全证书配置 五.部署CAS-Server相关的Tomcat 六.部署CAS-Client相关的Tomcat 七. 测试验证SSO 一.概述 ...

  4. CAS 单点登录【2】自定义用户验证

       基础不太熟的同学可以先去看:CAS 单点登录[1]入门 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验证用户的处理器. 1.QueryDatabaseAuthe ...

  5. cas 单点登录出现org.jasig.cas.client.util.CommonUtils.getResponseFromServer - 拒绝连接 Connection refused

    cas 单点登录出现org.jasig.cas.client.util.CommonUtils.getResponseFromServer - 拒绝连接 Connection refused 环境: ...

  6. CAS单点登录中文用户名乱码问题

    CAS单点登录中文用户名乱码问题,有两种情况 1. CAS server乱码 即在向server端提交用户名和密码时,发生了乱码,解决方法是: 打开WEB-INF/web.xml,在其它的Filter ...

  7. CAS单点登录系统整合——注册的问题

    最近一段时间在搞CAS单点登录系统,涉及到几个子系统的整合问题.对于注册,这里遇到了一个选择: 在子系统内完成注册,然后把信息同步到CAS系统: 在CAS系统中完成基本信息的注册,比如:用户名.邮箱. ...

  8. Asp.net Mvc4 使用Cas单点登录

    因项目需要,使用了耶鲁大学的Cas单点登录方案,在java中使用一直正常,但是在.Net中碰到了循环重定向的问题,反复测试后,总算解决了,最终的配置如下: <?xml version=" ...

  9. CAS单点登录之mysql数据库用户验证及常见问题

    前面已经介绍了CAS服务器的搭建,详情见:搭建CAS单点登录服务器.然而前面只是简单地介绍了服务器的搭建,其验证方式是原始的配置文件的方式,这显然不能满足日常的需求.下面介绍下通过mysql数据库认证 ...

  10. SSO之CAS单点登录详细搭建教程

    本教程是我个人编写,花费几个小时的时间,给需要学习的人员学习使用,希望能帮助到你们. [环境说明]:本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows7 ...

随机推荐

  1. CodeSignal 刷题 —— matrixElementSum

    After they became famous, the CodeBots all decided to move to a new building and live together. The ...

  2. es 模块的基础知识,深度了解

    // 一模块的基础知识 /** * export :用于模块输出的出口 * import :文件引入的入口 */ // 1,第一种方式使用export方式输出 var a = 'a'; var b = ...

  3. JavaOO面向对象中的注意点(一)

    1.JavaOO宗旨思想: ★万物皆对象,对象因关注而产生★ ☆类是对象的抽取,对象是类的实例☆ 2.JavaOO的三大特征: 封装.继承.多态  (第四大特征 抽象 现还有争议) 3.属性与行为: ...

  4. MII接口简介

    Standard MII总共使用了15根线,外加2根MDIO线,如果要扩展PHY芯片,这些线除了其中两根(应该是TXCLK和RXCLK)以外都是不可共用的:而Reduce Media Independ ...

  5. Web Service 消息格式

    当客户端和Web Service服务器进行通信时,他们交换消息.客户端发送请求消息到Web Service服务器. Web Service服务器响应并返回消息.这就像普通的HTTP,浏览器发送一个HT ...

  6. SpringBoot的第一个web项目

    这一节主要是讲springboot搭建简单的web项目. 首先pom文件新增spring-boot-starter-web依赖,pom文件如下所示 <?xml version="1.0 ...

  7. UVA 1590 IP Networks JAVA

    题意:输入m代表接下来的数据个数,计算接下来输入数据的网络掩码,和最小网络地址. 思路:①子网掩码:先将数据转为二进制,判断从哪一位开始有数据不一样,记下下标index,则子网掩码是index的前面是 ...

  8. Python内存管理以及数据类型

    一.内存管理 1.Cpython解释器的垃圾回收机制 什么是垃圾:当一个值身上没有绑定任何变量名(该值的引用计数=0)时,该值就是一个垃圾. Cpython解释器就会自动回收这样的垃圾. #引用计数增 ...

  9. JAVA导入表格功能总结

    表格结构: SheetName:sheet名称(辅材采购申请单) RowNum:行数 FirstCellNum/LastCellNum:第一竖列/最后一竖列(从0开始),例:getCell(0) = ...

  10. BZOJ.4515.[SDOI2016]游戏(树链剖分 李超线段树)

    BZOJ 洛谷 每次在路径上加的数是个一次函数,容易看出是树剖+李超线段树维护函数最小值.所以其实依旧是模板题. 横坐标自然是取个确定的距离标准.取每个点到根节点的距离\(dis[i]\)作为\(i\ ...