在做SSO时,有时不一定返回客户端的不仅仅是用户名,有时还会要求返回用户ID等。
一、准备工作
cas官方网站
http://www.jasig.org/cas
下载最新的服务端 CAS Server 3.3.3 Final
cas官方网站上面的客户端下载地址比较隐秘,没有完全公开,具体地址为
http://www.ja-sig.org/downloads/cas-clients/
下载最新的cas-client-3.1.6-release.zip
下载附件中的所有JAR包。
二、数据库设置
create database userinfo
go
use userinfo
create table tb_userinfo(
id int identity primary key,
username varchar(20) NOT NULL,
password varchar(50) NOT NULL
)
insert into tb_userinfo values('arix04','123456')
三、服务器设置
1、将服务器端解压,将modules下面的cas-server-webapp-3.3.3.war部署到web服务器,重命名为CAS.war,作为单点的服务器。
2、导入modules中的cas-server-support-jdbc-3.3.3.jar包
3、导入数据库驱动
4、导入附件中的所有文件
修改WEB-INF中的deployerConfigContext.xml文件
5、添加数据源
<bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:sqlserver://localhost:1433;databaseName=userinfo</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
6、配置authenticationManager下面的authenticationHandlers属性
CAS原有的认证方式为用户名和密码一样,现在我们修改成通过数据库查找
先将以下配置注释掉
<bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
在注释掉的相应的位置加入以下配置
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="casDataSource" />
<property name="sql" value="select password from tb_userinfo where username = ?" />
</bean>
7、定义attributeRepository,通过jdbc查询用户的详细信息,可以把用户表的信息查询出来。
<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
<constructor-arg index="0" ref="casDataSource" />
<constructor-arg index="1" >
<list>
<value>username</value>
</list>
</constructor-arg>
<constructor-arg index="2">
<value>
select id,username,password from tb_userinfo where username = ?
</value>
</constructor-arg>
<property name="columnsToAttributes">
<map>
<entry key="id" value="id" />
<entry key="userName" value="userName" />
<entry key="password" value="password" />
</map>
</property>
</bean>
8、配置authenticationManager中credentialsToPrincipalResolvers属性
<bean
class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" >
<property name="attributeRepository" ref="attributeRepository"/>
9、默认cas登录服务器没有把用户信息传到客户端中,所以要修改WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp文件,增加以下代码:
<c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">
<cas:attributes>
<c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">
<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
</c:forEach>
</cas:attributes>
</c:if>
四、配置客户端
1、解压后把modules下面的包放到我们的web应用中。导入相庆的SPRING.JAR包
2.配置web.xml,注意encodingFilter要提前配置,不然会出现数据插入数据库的时候有乱码。
serverName是我们web应用的地址和端口
<context-param>
<param-name>serverName</param-name>
<param-value>www.test.com:9080</param-value>
</context-param>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.ftl</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.shtml</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.vm</url-pattern>
</filter-mapping>
<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>
<listener>
<listener-class>
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
</listener-class>
</listener>
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>
org.jasig.cas.client.authentication.AuthenticationFilter
</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://www.test.com:8443/cas/login</param-value>
</init-param>
</filter>
<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.test.com:8443/cas</param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</filter-class>
</filter>
<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 Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、得到相应的返回参数
AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();
String username = principal.getName();
Long id = Long.parseLong(principal.getAttributes().get("id").toString());
String password = principal.getAttributes().get("password").toString();
out.println(username);
out.println(id);
out.println(password);
分享到:
相关推荐
单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。在这个项目中,我们利用SpringBoot框架来实现基于Cookie的SSO。下面将详细解释这个项目的...
随着互联网技术的发展,统一登录系统(Single Sign-On, SSO)已成为网站间资源共享的重要手段之一。它允许用户在一次登录后即可访问多个关联的应用程序,而无需再次输入密码。这种方式不仅提升了用户体验,还加强了...
- **用户**:需要访问多个应用系统的最终用户。 - **应用系统**:需要被用户访问的各种应用和服务。 - **SSO认证服务**:负责用户认证的服务中心。 ### SSO的核心原则 SSO的实现通常遵循以下三个基本原则: 1. **...
单点登录(Single Sign-On,简称SSO)是一种身份验证机制,它允许用户在多个应用程序和服务之间共享身份信息,而无需多次输入用户名和密码。这种机制不仅提高了用户体验,减少了用户的记忆负担,同时也简化了系统的...
SSO(Single Sign-On)单点登录是一种...总之,基于.Net的SSO解决方案利用中心化的验证服务器和令牌机制,实现了用户在多个应用间的无缝登录体验。设计和实现时需兼顾安全、性能和可扩展性,确保系统的稳定性和可靠性。
6. **全局最优解**: 迭代结束后,算法返回具有最高适应度值的个体作为全局最优解。 在实际应用中,SSO算法常用于工程优化问题、机器学习模型参数调整、图像处理等领域。由于其独特的生物启发机制,SSO通常展现出...
单点登录(Single Sign-On,简称SSO)是现代企业业务整合中的一种流行解决方案,它允许用户在多个相互信任的应用系统中只需要登录一次即可访问所有系统,大大提高了用户体验和企业内部效率。SSO英文全称SingleSignOn...
单点登录(Single Sign-On,简称SSO)是一种让用户只需登录一次就能访问多个应用系统的技术。这不仅简化了用户的操作流程,也提高了系统的整体安全性。在本文档中提到的SSO系统主要由两部分组成:SSO中心域和客户端...
SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。在PHP环境中实现SSO,通常涉及以下几个关键步骤,以下将详细讲解: 1. **点击登录...
SSO(Single Sign-On)是一种身份验证机制,允许用户在一个应用系统中登录后,无需重新认证即可访问其他关联的应用系统。在.NET环境下实现SSO,通常涉及到的主要技术点包括集中验证服务、令牌管理和凭证共享。 1. ...
而单点登录(Single Sign-On, SSO)允许用户通过一次登录即可访问多个应用系统,无需反复输入凭证。Laravel 的强大功能与 Disqus 的便捷性相结合,可以为开发者提供更加高效的评论管理和用户认证体验。 首先,确保...
单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在基于.Net的环境中,SSO的实现可以通过集中验证的方式,即使用一个中心化的认证...
跨域获取Cookie是一种技术手段,常用于实现多个网站间的单点登录(Single Sign-On, SSO)。在这种场景下,用户在A网站登录后,无需在B网站再次输入用户名和密码,可以直接访问B网站并保持登录状态。这个过程涉及到...
这种系统对于大型企业或组织尤其有用,它们通常拥有多个内部或外部应用服务,需要集成并提供统一的用户体验。本文档主要介绍了如何设计和实现一个单点登录(SSO)系统,遵循以下几个关键原则: 1. **不大规模改造...
跨域获取Cookie是互联网应用中实现单点登录(Single Sign-On, SSO)的一种常见技术,尤其在多网站协作或拥有多个子域名的大型系统中。这里的例子展示了如何通过JavaScript和PHP实现在A网站登录后,B网站能够自动识别...
用户单点登录(Single Sign-On,简称SSO)是一种让用户在多个应用系统中只需要一次登录即可访问所有系统的身份认证方式。在SSO系统中,通常会有一个中心认证服务(CAS)来验证用户的凭证,一旦用户在一个应用系统中...
单点登录(Single Sign-On, SSO)是一种网络身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。这里我们讨论的是一个名为"单点登录业务接口1"的系统,它提供了四个主要的API接口...
在IT行业中,集成单点登录(Single Sign-On, SSO)是一种常见的身份验证方法,它允许用户通过一次登录,即可访问多个相互独立的应用系统。在这个场景中,"decision(修正ajax error)" 指的可能是解决在实现SSO过程中...
在同一个顶级域名下可能存在多个子域名,如:app1.example.com 和 app2.example.com。为了使这些子域名下的应用能够实现SSO,可以通过以下方式配置: - **调整cookie域**:在Web.config文件中,设置`<forms>`元素的...