【SSO单点登录】6.跨子域cookie单点登录(二)

本文章由聚项云平台博客独家原创,转载请注明出处:http://blog.jxcode.com/?p=2924&preview=true

上一篇我们利用cookie实现了一个跨子域的单点登录。
但是企业中估计没有用这种方式实现单点登录的系统群了,因为cookie有安全隐患,但是通过上一节我们了解了一个简单的单点登录的大致实现方式。

在利用cookie实现单点登录的系统中,cookie就扮演了之前我们一直提到过的凭证的“票据”,而我们模拟认证系统的工程“SsoTestProject_Portal”就相当于整合门户的登录系统:
图6.1

之前我们拿百度的门户网站和子系统举过例子:
图6.2
上面这种跨子域,与上一篇我们实现的跨子域是有区别的。我们使用本地的虚拟路径来模拟一下。

在tomcat中设置相应的域名和访问的文件夹路径,就可以根据不同的域名访问到不同的网站资源。这里在MyEclipse引用的tomcat在磁盘中的真实路径下的conf文件夹下的server.xml中的“<Engine>”标签对中添加一下host配置(如果是使用eclipse而不是MyEclipse,直接在工作栏的Server下更改server.xml即可):
图6.3

<Host name="www.ssotest.cn" appBase="ssotest" unpackWARs="true" autoDeploy="true"></Host>
 <Host name="mail.ssotest.cn" appBase="mail" unpackWARs="true" autoDeploy="true"></Host>
 <Host name="bbs.ssotest.cn" appBase="bbs" unpackWARs="true" autoDeploy="true"></Host>

 

然后为了访问方便,不写端口号,这里将默认的8080端口号改为80:

 <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

 

之后在C盘中修改hosts文件,来绑定以上虚拟域名在127.0.0.1的本地地址上:
图6.4
在hosts文件中的“127.0.0.1 localhost”下添加以下配置:

127.0.0.1 www.ssotest.cn
127.0.0.1 mail.ssotest.cn
127.0.0.1 bbs.ssotest.cn

然后在Tomcat所在目录中创建名称为“ssotest”、“mail”和“bbs”的文件夹:
图6.6
在下面分别创建名为“ROOT”的根目录文件夹,然后放置内容不同的html文件(名称都叫“hello.html”):
图6.5
内容很简单,分别为:
bbs文件夹下html内容:

<html>
 <head>
 <title>ssotest旗下bbs论坛</title>
 </head>
 <body>
 <h1>欢迎访问bbs论坛!</h1>
 </body>
</html>

mail文件夹下html内容:

<html>
 <head>
 <title>ssotest旗下mail邮件系统</title>
 </head>
 <body>
 <h1>欢迎访问mail邮件系统!</h1>
 </body>
</html>

ssotest文件夹下html内容:

<html>
 <head>
 <title>ssotest首页</title>
 </head>
 <body>
 <h1>欢迎访问ssotest系统!</h1>
 </body>
</html>

 

然后我们重启Tomcat,分别访问设置的虚拟地址:
图6.7

可以看到我们的虚拟路径设置成功。

然后回到MyEclipse中,修改“SsoTestProject_Portal”工程的LoginServlet类,将cookie的网关(域名)设置为“ssotest.cn”下:

//将登录认证信息放置在cookie中
Cookie cookie = new Cookie("sso_01",username);
//设置cookie的生命周期
cookie.setMaxAge(60*60);
//设置cookie作用到整个tomcat包下
cookie.setPath("/");
//设置服务的网关
cookie.setDomain("ssotest.cn");
response.addCookie(cookie);

这样三个工程就可以共享一个域下的cookie信息了。

然后修改“SsoTestProject_Portal”工程的主页success.jsp,将超链接改为虚拟域名:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <title>SsoTestProject_Portal成功</title>
 </head>
 
 <body>
 登录成功!O(∩_∩)O<br/>
 <a target="_blank" href="http://mail.ssotest.cn/LoginServlet">业务系统A</a><br/>
 <a target="_blank" href="http://bbs.ssotest.cn/LoginServlet">业务系统B</a><br/>
 </body>
</html>

 

最后重新将该工程部署至Tomcat。

之后我们就将原来在bbs下的“SsoTestProject_Portal”、“SsoTestProject_A”、和“SsoTestProject_B”三个工程文件夹下的内容分别复制一份到“ssotest”、“mail”和“bbs”的ROOT文件夹下:
图6.8 图6.9

然后重启Tomcat,访问认证系统主页:
图6.10
然后进行登录,发现可以成功跳转至系统A和系统B:
图6.11

至此,我们利用cookie和虚拟域名实现了类似百度子域名的单点登录的效果。

未经允许不得转载:JX BLOG » 【SSO单点登录】6.跨子域cookie单点登录(二)

赞 (1)

评论 0

评论前必须登录!

登陆 注册