`
huraky
  • 浏览: 31760 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

手工实现SSO

    博客分类:
  • JAVA
阅读更多

    前一阵子公司要求做一个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>
 
分享到:
评论
1 楼 asdfwyg 2011-05-26  
跨域的问题不好解决

相关推荐

    SSO的简单实现SSO的简单实现

    以下是对SSO简单实现的详细说明: 在实现SSO时,有多种方法可以选择: 1. **商业软件**:一些大型公司如 Netgrity(Siteminder)、Novell(iChain)、RSA(ClearTrust)等提供专门的SSO解决方案。这些软件通常具备...

    基于JWT实现SSO单点登录流程图解

    基于JWT实现SSO单点登录流程图解 基于JWT实现SSO单点登录流程图解是指使用JSON Web Token(JWT)来实现单点登录(SSO)的机制。在这种机制中,用户只需要登录一次,就可以访问多个应用服务器上的资源,而不需要再次...

    spring boot 实现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...

    CAS实现sso单点登录原理

    SSO实现模式的原则: 1. 所有的认证登录都在SSO认证中心进行。 2. SSO认证中心通过一些方法来告诉Web应用当前访问用户究竟是不是已通过认证的用户。 3. SSO认证中心和所有的Web应用建立一种信任关系,也就是说Web...

    ssm redis实现sso单点登录

    在本文中,我们将深入探讨如何使用SSM(Spring MVC、Spring、MyBatis)框架结合Redis缓存来实现SSO功能。 首先,了解SSO的核心原理是关键。SSO主要依赖于票据(Ticket)的概念,当用户成功登录到一个系统时,服务器...

    SSO个人实现方式

    在本文中,我们将探讨SSO的原理,以及如何通过提供的压缩包文件实现个人SSO系统。 SSO的核心思想是将用户认证过程集中管理,当用户成功登录到一个“认证中心”后,可以在其他已集成的系统中无缝漫游。这减少了用户...

    PHP 使用TP5.0 实现SSO单点登录

    因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。

    关于SSO单点登录的简单实现

    在本文中,我们将探讨SSO的基本原理以及一个简单的实现方法。 SSO的核心是中央认证服务(CAS),它负责验证用户的凭证并生成票据。当用户尝试访问受保护的资源时,他们会被重定向到CAS服务器进行身份验证。如果验证...

    spring security oauth2 实现jwt sso

    三、SSO实现过程 1. 用户访问系统A,被重定向到SSO授权服务器进行身份验证。 2. 用户成功登录后,授权服务器生成一个JWT,并返回给系统A。 3. 系统A将JWT保存在本地(例如,使用Cookie),并跳转回最初请求的页面。...

    java web sso 实现

    Java Web SSO(Single Sign-On)实现主要涉及的是在多个应用系统之间实现用户单点登录的功能,即用户只需要登录一次,就能在多个相互信任的应用系统中自由切换,无需再次进行身份验证。SSO的核心思想是将认证过程...

    spring+springMvc简单实现SSO单点登录

    利用springMvc 实现的简单的单点登录Demo,内含三个小Mavn项目分别是 1、认证中心SSOServer 2、子系统1SSOClient1 3、子系统2SSOClient2 文章请参考 http://blog.csdn.net/qq_31183297/article/details/79419222

    Redis实现SSO

    在SSO实现中,可能需要使用`set()`方法存储票据,`get()`方法验证票据,以及`expire()`方法设置票据的过期时间,确保安全性和时效性。 项目中的数据库配置要求添加一个名为"sso"的表,这可能用于存储用户信息或其他...

    Weblogic使用YALE(耶鲁)CAS实现SSO单点登录 的方法.doc

    Weblogic 使用 YALE CAS 实现 SSO 单点登录的方法 一、Yale CAS 简介 Yale CAS 是耶鲁大学开发的一种开源的单点登录(SSO)解决方案,提供了一个通用的身份验证框架,允许用户使用单个身份验证来访问多个应用程序。...

    新浪微博如何实现 SSO

    新浪微博如何实现 SSO

    spring security 实现 sso 单点登录Demo

    使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth

    FORM 验证AD 并实现SSO

    在IT领域,特别是网络安全与身份验证方面,"FORM 验证AD 并实现SSO"是一个重要的主题。这里,我们主要讨论如何通过Active Directory(AD)进行基于表单的身份验证,并利用MachineKey来实现Single Sign-On(SSO)功能...

    OAuth2+ SSO实现单点登录

    OAuth2+ SSO实现单点登录,包括源码 看别人写的代码好像很简单似,到自己写的时候就各种问题,“一看就会,一做就错”。网上关于实现SSO的文章一大堆,但是当你真的照着写的时候就会发现根本不是那么回事儿,简直让...

    springboot简单实现sso单点登入

    分别运行三个项目,访问客户端接口

    .net单点登录sso的实现

    二、.NET SSO实现的关键组件 1. 认证中心:负责用户的身份验证,为用户提供登录界面,并生成认证令牌。 2. 应用系统:需要与认证中心进行交互,验证用户的身份,并接受认证令牌。 3. 协议支持:例如CAS(Central ...

    SSO单点登录实现与实现原理

    二、SSO实现方式 1. **基于Cookie的实现**:最简单的方式是使用共享Cookie。每个应用都会设置相同的Cookie,当用户在一个应用中登录后,其他应用可以通过检查Cookie来确认用户已经登录。 2. **基于JWT(JSON Web ...

Global site tag (gtag.js) - Google Analytics