开源的单点登录系统CAS入门
来源:互联网 发布:淘宝消费贷款怎么申请 编辑:程序博客网 时间:2024/05/29 09:12
单点登录
单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.
当一个系统中存在诸多子系统,而这些子系统又是分布在不同的服务器中,那么使用传统的session是无法解决的,这就需要使用相关的单点登录技术来解决
CAS
CAS是Yale大学发起的一个开源项目,只在为文本应用系统给提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
- 开源的企业级单点登录解决方案
- CAS Service 是需要独立部署的web应用
- CAS Client 支持非常多的客户端(这里是指 单点登录系统中各个web应用),包括JAVA,.Net,PHP等
CAS,它主要分为两个部分,一个是CAS client(简称为client),和一个CAS Servier(简称为service).service需要独立的进行部署,负责对用户的认证工作.而client则负责处理对客户端发送过来的访问请求,需要登录时会重定向到service.
这个是CAS大致的协议过程
#### CAS服务端的部署
先下载一个CAS的资源包,把它解压开.找到它的war包.我的解压开之后在
E:\cas-server-4.0.0-release\cas-server-4.0.0\modules
目录下面找到
cas-server-webapp-4.0.0.war
将它改名为cas.war放在一个Tomcat的webAPP目录下面,启动Tomcat之后你可以在浏览器中输入localhost:8080/cas就能够看到下面的页面
但是我们经常要使用Tomcat不可能一直让它占用这个端口,所以我们需要修改一下端口号
打开Tomcat下面的conf/server.xml找到下面的代码
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
把8080这个端口修改一下,我这里修改为9100
同时也要修改cas的配置文件
打开cas/WEB-INF/cas.properties
server.name=http://localhost:8080(修改为9100)
顺便去除掉HTTPS认证,这个认证是需要money的,
修改cas/WEB-INF/deployerConfigContext.xml找到下面的配置
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
这里需要增加参数p:requireSecure=”false”,requireSecure属性意思为是否需要安全验证,即HTTPS,false为不采用
- 修改cas的/WEB-INF/springconfigurationticketGrantingTicketCookieGenerator.xml
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
参数p:cookieSecure=”true”,同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。
参数p:cookieMaxAge=”-1”,是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意窗口,都不需要验证。
将cookieSecure改为false , cookieMaxAge 改为3600
- 修改cas下的/WEB-INF/spring-configuration/warnCookieGenerator.xml
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" />
将cookieSecure改为false , cookieMaxAge 改为360
入门案例
- 创建一个maven工程导入依赖,引入cas客户端依赖并制定tomcat运行端口为9001
#
<dependencies> <!-- cas -- <dependency <groupId>org.jasig.cas.client</groupId <artifactId>cas-client-core</artifactId <version>3.3.3</version </dependency <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version <scope>provided</scope> </dependency></dependencies
#
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 --> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <!-- 该过滤器用于实现单点登出功能,可选配置。 --> <filter> <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> <filter-name>CASFilter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>http://localhost:9100/cas/login</param-value> <!--这里的server是服务端的IP --> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:9001</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责对Ticket的校验工作,必须启用它 --> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class> org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>http://localhost:9100/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:9001</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --> <filter> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <filter-class> org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 --> <filter> <filter-name>CAS Assertion Thread Local Filter</filter-name> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Assertion Thread Local Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
* 编写index.jsp
#
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>半庭竹韵</title></head><body>欢迎来到这里<%=request.getRemoteUser()%></body></html>
当你开着CAS的服务的时候,在启动这个项目,你打开这个index页面,就会显示用户名
- 开源的单点登录系统CAS入门
- cas单点登录系统
- cas单点登录系统
- CAS实现的单点登录系统
- CAS实现的单点登录系统
- CAS实现的单点登录系统
- CAS单点登录快速入门
- java单点登录系统CAS的简单使用
- CAS单点登录系统整合——注册的问题
- java单点登录系统CAS的简单使用
- java单点登录系统CAS的简单使用
- Java 单点登录系统 CAS 的简单使用
- 单点登录cas的使用
- CAS的单点登录原理
- CAS 实现的单点登录
- CAS 实现的单点登录
- CAS单点登录-入门配置详解
- Liferay开源门户系统之cas单点登录功能集成方法
- 第十一周——项目二—操作用邻接表存储的图
- Pixhawk组装中的一些BUG
- 利用Markdown创建表格
- 穷举二进制
- Haskell lesson:类型系统解读
- 开源的单点登录系统CAS入门
- C++必知必会——读书笔记(1)
- Computer Transformation UVA
- Unity Navmeshagent与飞行
- React高级指南(七)【React Without JSX】
- 计蒜客 最长公共子序列
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- C语言进阶-第17讲:链表和数组的比较
- 感悟