前一阵子公司要求做一个SSO(Single Sign On),把现有的子网站的用户全部整合起来。于是乎在互联网上搜到了CAS这个经典的SSO项目,便拿来研究,部署。但是由于他用到了证书,而使用自己颁发的证书时浏览器都要进行阻拦,而要取得合法证书又是颇费周章。于是决定自己实现一个超简单的SSO,这个SSO暂没有考虑安全机制。
下面描述以下这个SSO的实现原理,以便以后温习,呵呵......
1.本SSO的实现主要是使用了COOKIES,因为COOKIES可以保存一个域上的所有站点信息(跨域COOKIES的实现没有研究)。
2.新建一个SSO项目,然后部署。对于要统一登录的子站点,分别添加一个过滤器,在过滤器只使用了common-httpclient包的方法来远程调用另外服务器上指定的方法。从而实现了单点登录。
其实思路很简单,实现起来也很简单。主要是服务器端解析客户端发来的请求,是登录·注册·登出,还是其它类型的操作从而执行相应的方法。然后跳转回子站点应该跳转的URL上。
本方法参考了互联网上某位师兄的文章,网址暂时记不起来了,请见谅!
服务器端主要代码如下:
/**
*定义两个容器来保存登录用户的ID及COOKIESID
**/
private static java.util.concurrent.ConcurrentMap<String, String> accounts;
private static java.util.concurrent.ConcurrentMap<String, String> SSOIDs;
/**
*下面是服务器主要的是服务方法的分支。
**/
java.io.PrintWriter out = response.getWriter();
java.lang.String action = request.getParameter("action");
java.lang.String result = "failed";
if (action == null)
{
/**
*验证用户名密码,成功后写COOKIES然后返回指定的URL
**/
} else if (action.equals("authcookie"))
{
java.lang.String myCookie = request.getParameter("cookiename");
if (myCookie != null)
{
result =" 验证COOKIES,并返回保存的用户名";
}
out.print(result);
out.close();
} else if (action.equals("authuser"))
{
result = authNameAndPasswd(request, response);
out.print(result);
out.close();
} else if (action.equals("logout"))
{
java.lang.String myCookie = request.getParameter("cookiename");
logout(request, response, myCookie);//清除COOKIES
out.close();
}
客户端过滤器的主要代码如下:
/**
*根据在WEB.XML文件中配置的过滤器参数来组建请求URL来读取服务器端返回的COOKIES中的用户名
**/
org.apache.commons.httpclient.HttpClient httpclient = null;
org.apache.commons.httpclient.methods.GetMethod httpget = null;
java.lang.String authAction = "?action=authcookie&cookiename=";
httpclient = new HttpClient();
httpget = new GetMethod((new StringBuilder()).append(SSOServiceURL)
.append(authAction).append(cookievalue).toString());
try
{
java.lang.String s;
httpclient.executeMethod(httpget);
java.lang.String result = httpget.getResponseBodyAsString();
s = result;
httpget.releaseConnection();
return s;
} catch (Exception e)
{
httpget.releaseConnection();
return "failed";
}
客户端WEB.XML文件配置如下:
<filter>
<filter-name>SSOFilter</filter-name>
<filter-class>xxx.xxx.filter.SSOFilter</filter-class>
<init-param>
<param-name>cookieName</param-name>
<param-value>cookies_name</param-value>
</init-param>
<init-param>
<param-name>SSOServiceURL</param-name>
<param-value>http://xxx.com/SSO.do</param-value>
</init-param>
<init-param>
<param-name>SSOLoginPage</param-name>
<param-value>http://xxx.com/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SSOFilter</filter-name>
<url-pattern>/UserLogin.lo</url-pattern>
</filter-mapping>
分享到:
相关推荐
以下是对SSO简单实现的详细说明: 在实现SSO时,有多种方法可以选择: 1. **商业软件**:一些大型公司如 Netgrity(Siteminder)、Novell(iChain)、RSA(ClearTrust)等提供专门的SSO解决方案。这些软件通常具备...
基于JWT实现SSO单点登录流程图解 基于JWT实现SSO单点登录流程图解是指使用JSON Web Token(JWT)来实现单点登录(SSO)的机制。在这种机制中,用户只需要登录一次,就可以访问多个应用服务器上的资源,而不需要再次...
spring boot整合spring security 实现SSO单点登陆 完整DEMO. 1、配置本地hosts 127.0.0.1 sso-login 127.0.0.1 sso-resource 127.0.0.1 sso-tmall 127.0.0.1 sso-taobao windows系统的路径在C:\WINDOWS\system...
SSO实现模式的原则: 1. 所有的认证登录都在SSO认证中心进行。 2. SSO认证中心通过一些方法来告诉Web应用当前访问用户究竟是不是已通过认证的用户。 3. SSO认证中心和所有的Web应用建立一种信任关系,也就是说Web...
在本文中,我们将深入探讨如何使用SSM(Spring MVC、Spring、MyBatis)框架结合Redis缓存来实现SSO功能。 首先,了解SSO的核心原理是关键。SSO主要依赖于票据(Ticket)的概念,当用户成功登录到一个系统时,服务器...
在本文中,我们将探讨SSO的原理,以及如何通过提供的压缩包文件实现个人SSO系统。 SSO的核心思想是将用户认证过程集中管理,当用户成功登录到一个“认证中心”后,可以在其他已集成的系统中无缝漫游。这减少了用户...
因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。
在本文中,我们将探讨SSO的基本原理以及一个简单的实现方法。 SSO的核心是中央认证服务(CAS),它负责验证用户的凭证并生成票据。当用户尝试访问受保护的资源时,他们会被重定向到CAS服务器进行身份验证。如果验证...
三、SSO实现过程 1. 用户访问系统A,被重定向到SSO授权服务器进行身份验证。 2. 用户成功登录后,授权服务器生成一个JWT,并返回给系统A。 3. 系统A将JWT保存在本地(例如,使用Cookie),并跳转回最初请求的页面。...
Java Web SSO(Single Sign-On)实现主要涉及的是在多个应用系统之间实现用户单点登录的功能,即用户只需要登录一次,就能在多个相互信任的应用系统中自由切换,无需再次进行身份验证。SSO的核心思想是将认证过程...
利用springMvc 实现的简单的单点登录Demo,内含三个小Mavn项目分别是 1、认证中心SSOServer 2、子系统1SSOClient1 3、子系统2SSOClient2 文章请参考 http://blog.csdn.net/qq_31183297/article/details/79419222
在SSO实现中,可能需要使用`set()`方法存储票据,`get()`方法验证票据,以及`expire()`方法设置票据的过期时间,确保安全性和时效性。 项目中的数据库配置要求添加一个名为"sso"的表,这可能用于存储用户信息或其他...
Weblogic 使用 YALE CAS 实现 SSO 单点登录的方法 一、Yale CAS 简介 Yale CAS 是耶鲁大学开发的一种开源的单点登录(SSO)解决方案,提供了一个通用的身份验证框架,允许用户使用单个身份验证来访问多个应用程序。...
新浪微博如何实现 SSO
使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth
在IT领域,特别是网络安全与身份验证方面,"FORM 验证AD 并实现SSO"是一个重要的主题。这里,我们主要讨论如何通过Active Directory(AD)进行基于表单的身份验证,并利用MachineKey来实现Single Sign-On(SSO)功能...
OAuth2+ SSO实现单点登录,包括源码 看别人写的代码好像很简单似,到自己写的时候就各种问题,“一看就会,一做就错”。网上关于实现SSO的文章一大堆,但是当你真的照着写的时候就会发现根本不是那么回事儿,简直让...
分别运行三个项目,访问客户端接口
二、.NET SSO实现的关键组件 1. 认证中心:负责用户的身份验证,为用户提供登录界面,并生成认证令牌。 2. 应用系统:需要与认证中心进行交互,验证用户的身份,并接受认证令牌。 3. 协议支持:例如CAS(Central ...
二、SSO实现方式 1. **基于Cookie的实现**:最简单的方式是使用共享Cookie。每个应用都会设置相同的Cookie,当用户在一个应用中登录后,其他应用可以通过检查Cookie来确认用户已经登录。 2. **基于JWT(JSON Web ...