- 浏览: 60665 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (117)
- RPC相关 (4)
- mvc_controller (3)
- mvc_model (3)
- maven (4)
- mvc_view (5)
- IO (2)
- 业务相关 (2)
- MQ (7)
- 搜索引擎 (3)
- zookeeper (2)
- 工具相关 (4)
- 编辑错误 (1)
- tomcat (1)
- 单元测试 (1)
- 负载均衡 (1)
- ubuntu (1)
- nginx (1)
- dubbo (2)
- 网络站点分发 (1)
- 电商-支付相关 (10)
- 电商订单业务相关 (3)
- Core java1 (3)
- Core Java (12)
- 多线程高并发(并发包/线程/锁) (10)
- 数据库+缓存 (17)
- springcloud (2)
- jvm (5)
- 日志相关 (1)
- 算法 (3)
- spring (2)
- 分布式一致性算法 (1)
最新评论
教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤
生成证书前需要配置证书:
1、生成证书
用JDK自带的keytool工具生成证书:
D盘下创建keys文件,不需要创建hailong
hailong 是证书别名
2、导出证书
.crt密钥文件
3、把证书导入到客户端JDK中。
如果出现以下错误,把...jdk1.7.0_79\jre\lib\security下的cacerts文件删除掉,在执行。
4、配置服务端
下载CAS的服务端,解压,把解压后的文件中文件夹中的cas-server-webapp-3.4.8.war文件拷贝的apache-tomcat-7.0.73\webapps下,并修改文件名为:cas.war。
2、修改apache-tomcat-7.0.73\conf\server.xml文件,去掉此文件83到93行之间的注释,修改为:
5、启动tomcat
账号 admin,密码 admin 默认账号和密码一样就行
配置host域名,用https访问 https://sso.wsria.com:8443/cas
具体链接 http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html
http://liujiawinds.iteye.com/blog/1990715
cas客户端配置
<!-- pom.xml-->
输入客户端地址 http://www.hailongsso.com:8081/SingleSignOnExample
重定向到cas单点登录画面
拦截认证的AuthenticationFilter.java具体分析
对于cas客户端的认证和拦截配置到具体的业务服务项目里,对认证拦截可以有自定义的规则,重写或替换AuthenticationFilter.java等类。
修改CAS的认证逻辑
CAS默认的逻辑是用户名和密码一致就可以登陆,现在需要把原web系统的用户名和密码校验挪到CAS中。这里假设原先web系统中有一张sys_user表存储了用户名和MD5散列后的密码。
打开cas/WEB-INF/deployerConfigContext.xml
注释掉SimpleTestUsernamePasswordAuthenticationHandler这个Handler,并添加
在文件末尾之前加入数据库的链接:
cas加入jdbc支持
复制cas-server-3.5.2\modules\cas-server-support-jdbc-3.5.2.jar和oracle驱动(这里采用oracle数据)的ojdbc14.jar或者classes12.jar放到cas/WEB-INF/lib目录下。
cas-server-webapp源码打包cas-server-webapp.war修改成cas.war
就是以上所说服务的war包:
生成证书前需要配置证书:
1、生成证书
用JDK自带的keytool工具生成证书:
D盘下创建keys文件,不需要创建hailong
命令:keytool -genkey -alias(别名)hailong -keyalg RSA -keystore D:/keys/hailong
hailong 是证书别名
2、导出证书
命令:C:\>keytool -export -file d:/keys/hailongCRT.crt -alias hailong(别名要一致) -keystore d:/keys/hailong
.crt密钥文件
3、把证书导入到客户端JDK中。
命令:keytool -import -keystore D:\software\jdk\java1.7\jdk1.7.0_79\jre\lib\security\cacerts -file D:/keys/hailongCRT.crt -alias hailong
如果出现以下错误,把...jdk1.7.0_79\jre\lib\security下的cacerts文件删除掉,在执行。
eytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect
4、配置服务端
下载CAS的服务端,解压,把解压后的文件中文件夹中的cas-server-webapp-3.4.8.war文件拷贝的apache-tomcat-7.0.73\webapps下,并修改文件名为:cas.war。
2、修改apache-tomcat-7.0.73\conf\server.xml文件,去掉此文件83到93行之间的注释,修改为:
5、启动tomcat
账号 admin,密码 admin 默认账号和密码一样就行
配置host域名,用https访问 https://sso.wsria.com:8443/cas
具体链接 http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html
http://liujiawinds.iteye.com/blog/1990715
cas客户端配置
<!-- pom.xml-->
<dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.1.12</version> </dependency>
<!-- ======================== 单点登录开始 ======================== --> <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 --> <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>https://www.hailongsso.com:8443/cas/login</param-value> <!--这里的server是服务端的IP,点单登录地址链接 --> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://www.hailongsso.com:8081</param-value><span style="color:#FF0000;"> ①</span> <!--登录后的客户链接地址 --> </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>https://www.hailongsso.com:8443/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://www.hailongsso.com:8081</param-value> <span style="color:#FF0000;">②</span> </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> <!-- ======================== 单点登录结束 ======================== -->
输入客户端地址 http://www.hailongsso.com:8081/SingleSignOnExample
重定向到cas单点登录画面
拦截认证的AuthenticationFilter.java具体分析
public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException { final HttpServletRequest request = (HttpServletRequest) servletRequest; final HttpServletResponse response = (HttpServletResponse) servletResponse; //TGC Cookie传过来了,验证一下是不是其生成的,如果是,那我用TGT签发一个ST,redirect给浏览器 //session 对应 TGC Cookie 三次进入 null 有值 有值 // 第一次来,没有TGC Cookie,客户端输入账号密码后去cas才能有 final HttpSession session = request.getSession(false); //assertion 对应ST 三次进入 null null 有值 // 第二次来,没有ST,第三次进来去CAS申请后才有值。 final Assertion assertion = session != null ? (Assertion) session.getAttribute(CONST_CAS_ASSERTION) : null; if (assertion != null) { filterChain.doFilter(request, response); return; } final String serviceUrl = constructServiceUrl(request, response); final String ticket = CommonUtils.safeGetParameter(request,getArtifactParameterName()); final boolean wasGatewayed = this.gatewayStorage.hasGatewayedAlready(request, serviceUrl); if (CommonUtils.isNotBlank(ticket) || wasGatewayed) { filterChain.doFilter(request, response); return; } final String modifiedServiceUrl; log.debug("no ticket and no assertion found"); if (this.gateway) { log.debug("setting gateway attribute in session"); modifiedServiceUrl = this.gatewayStorage.storeGatewayInformation(request, serviceUrl); } else { modifiedServiceUrl = serviceUrl; } if (log.isDebugEnabled()) { log.debug("Constructed service url: " + modifiedServiceUrl); } final String urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl, getServiceParameterName(), modifiedServiceUrl, this.renew, this.gateway); if (log.isDebugEnabled()) { log.debug("redirecting to \"" + urlToRedirectTo + "\""); } response.sendRedirect(urlToRedirectTo); }
对于cas客户端的认证和拦截配置到具体的业务服务项目里,对认证拦截可以有自定义的规则,重写或替换AuthenticationFilter.java等类。
修改CAS的认证逻辑
CAS默认的逻辑是用户名和密码一致就可以登陆,现在需要把原web系统的用户名和密码校验挪到CAS中。这里假设原先web系统中有一张sys_user表存储了用户名和MD5散列后的密码。
打开cas/WEB-INF/deployerConfigContext.xml
注释掉SimpleTestUsernamePasswordAuthenticationHandler这个Handler,并添加
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property ref="dataSource" name="dataSource"></property> <property name="sql" value="select t.encrypted_user_password from sys_user t where t.user_name=?"></property> <property ref="MD5PasswordEncoder" name="passwordEncoder"></property> </bean>
在文件末尾之前加入数据库的链接:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@yourIP:1521:yourOracleInstanceId</value> </property> <property name="username"> <value>yourName</value> </property> <property name="password"> <value>yourPassword</value> </property> </bean> <bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"> <constructor-arg index="0"> <value>MD5</value> </constructor-arg> </bean>
cas加入jdbc支持
复制cas-server-3.5.2\modules\cas-server-support-jdbc-3.5.2.jar和oracle驱动(这里采用oracle数据)的ojdbc14.jar或者classes12.jar放到cas/WEB-INF/lib目录下。
cas-server-webapp源码打包cas-server-webapp.war修改成cas.war
就是以上所说服务的war包:
相关推荐
CAS(Central Authentication Service)是一种广泛使用的开放源码的单点登录(Single ...在提供的文档《手把手教你利用CAS实现单点登录.docx》中,你将找到更详细的步骤和示例代码,帮助你更好地理解和实施CAS SSO。
本压缩包"集成cas实现单点登录认证.zip"显然包含了关于如何使用CAS(Central Authentication Service)框架集成SSO认证的资源。下面我们将详细探讨相关的知识点。 1. CAS简介:CAS是耶鲁大学开源的一个Web应用的...
### CAS单点登录(SSO)教程详解 #### 前言 随着企业信息化建设的不断发展,用户需要在多个系统之间切换并重复登录的情况越来越常见,这不仅降低了用户体验,还增加了管理成本。为了解决这一问题,单点登录(Single ...
**基于Cas的单点登录实现** 单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。它为用户提供了一种方便、高效的访问多系统的方式,同时减少...
通过上述步骤,我们不仅了解了CAS单点登录的基本原理,还掌握了如何利用`keytool`工具生成、导出和导入证书,以及如何在Tomcat服务器上配置SSL以实现安全的数据传输。CAS SSO配置虽然看似复杂,但遵循正确的步骤并...
X2.5与CAS(Central Authentication Service)集成是一种常见的身份验证解决方案,它能够实现单点登录(Single Sign-On, SSO)功能。在SSO系统中,用户只需登录一次,就可以在多个相互独立的应用系统之间自由切换,...
CAS(Central Authentication Service)是 Yale 大学发起的一个开源项目,它提供了一种在Web 应用中统一处理用户认证的解决方案,被称为单点登录(Single Sign-On,简称SSO)。SSO允许用户在一个系统中登录后,无须...
总结,通过学习和实践这个"利用CAS实现单点登录的完整实例",你将掌握如何使用Jasig CAS构建一个高效的单点登录系统,从而提升用户体验,简化身份验证管理,并加强系统的安全性。记得深入理解每个步骤,并根据实际...
"itop接入CAS单点登录框架实现步骤" 本文将详细介绍开源ITSM工具iTop接入开源单点登录框架CAS的实现方法。该方法经过实践验证,已经在作者的单位中应用。 CAS框架简介 CAS(Central Authentication Service)是一...
Weblogic 使用 YALE CAS 实现 SSO 单点登录的方法 一、Yale CAS 简介 Yale CAS 是耶鲁大学开发的一种开源的单点登录(SSO)解决方案,提供了一个通用的身份验证框架,允许用户使用单个身份验证来访问多个应用程序。...
【CAS_SSO单点登录实例详细步骤】 ...通过以上步骤,你可以实现基于CAS的SSO单点登录功能。这个过程涉及了证书的生成、导入以及CAS服务器和客户端的配置,确保所有步骤正确执行,才能实现无缝的单点登录体验。
为了实现CAS单点登录,首先需要对CASServer进行一系列的配置和准备,具体包括: - **准备工具**:例如Tomcat作为应用服务器,keytool工具用于生成证书等。 - **配置环境**:确保服务器环境满足CASServer的要求,...
【Liferay + CAS 实现单点登录步骤】 在IT领域,单点登录(Single Sign-On,简称SSO)是一种方便用户管理和身份验证的技术,它允许用户通过一次登录就能访问多个相互关联的应用系统,无需多次输入凭证。Liferay是一...
CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...
本文将详细介绍如何使用CAS整合CXF,实现基于Tomcat服务器的单点登录部署步骤。 首先,我们需要在Tomcat服务器上部署CAS项目。这通常涉及以下步骤: 1. **下载CAS服务器**:从官方Git仓库或Maven仓库获取最新的CAS...
使用 CAS 和 Windows AD 实现单点登录免身份认证可以提高用户体验和系统安全,减少身份验证步骤,提高工作效率。同时,CAS 和 Windows AD 都是开源的解决方案,降低了系统成本和维护难度。 结论 使用 CAS 和 ...
配置Jeecg与CAS进行单点登录涉及以下几个步骤: 1. **安装和配置CAS服务器**:首先,你需要下载并安装Jasig CAS服务器,配置服务器的主配置文件`cas.properties`,包括数据库连接、服务端口、票证(Ticket)过期...
本文档将深入探讨如何使用 CAS 实现 Java 应用中的单点登录功能。 一、CAS 概述 CAS 是一个开源的身份验证框架,其核心目标是为用户提供一种集中式的身份验证方式,使得用户在访问各个应用时无需重复输入用户名和...