手工实现SSO

    前一阵子公司要求做一个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>
 
内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。
### VCSA 单点登录 (SSO) 配置教程 #### 准备工作 在配置 VMware vCenter Server Appliance (VCSA) 的单点登录 (SSO) 功能之前,需确认已成功完成 VCSA 安装并能够正常访问其管理界面。如果 DNS 解析存在问题,则需要手动编辑 `/etc/hosts` 文件来确保 PSC(Platform Services Controller)主机名可被正确解析[^1]。 --- #### SSO 配置流程 ##### 1. 登录到 VCSA Web 界面 通过浏览器访问 `https://<vcsa-ip-address>` 并输入管理员账户的用户名和密码以进入 VCSA 控制面板。默认情况下,初始管理员账号为 `administrator@vsphere.local`[^2]。 ##### 2. 访问 Single Sign-On 设置页面 导航至 **Administration** -> **Single Sign-On** 页面。此部分允许对身份验证源和服务进行高级配置。 ##### 3. 创建新域或调整现有域 - 如果尚未创建自定义 SAML 或 LDAP 域,可以选择在此处新增一个。 - 对于已有域,可以通过点击对应条目右侧的操作按钮修改属性,例如更改密码策略、启用多因素认证等[^3]。 ##### 4. 添加外部身份提供者 (IdP) 为了实现与其他系统的集成,可能需要引入第三方 IdP 如 Microsoft Active Directory Federation Services (ADFS),具体操作如下: - 进入 **Identity Sources** 子菜单; - 使用向导模式导入元数据 XML 文件或者手工指定端点 URL 和证书信息; - 测试连接以验证互信关系建立无误后再保存设置。 ##### 5. 处理常见错误提示 当遇到类似于 `"Failed to validate sso." ([Error 10003] Invalid Credentials)` 错误消息时,请检查以下几点: - 是否已经按照官方文档指示完成了必要的网络参数初始化? - 当前使用的客户端时间戳是否同步偏差过大?建议校准服务器与时钟服务保持一致。 - 双重确认所提供的凭据组合确实有效且未过期失效。 ##### 6. 启用 SSH 维护功能 尽管图形化工具提供了大部分所需选项开关,但在某些特殊场景下仍推荐开启远程 Shell 支持以便快速排查疑难杂症。执行命令如 `vim-cmd hostsvc/net/dns_cache_flush` 来刷新本地缓存记录有助于解决潜在冲突问题。 --- #### 注意事项 在整个过程中务必小心谨慎对待敏感资料保护措施以免泄露风险增加;另外考虑到兼容性和稳定性方面的原因,强烈建议遵循最新版本的产品指南逐步推进各项改动尝试。 ```bash # 示例:更新 /etc/hosts 文件内容 echo "<psc-ip> <psc-hostname>" >> /etc/hosts ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值