本实例使用JAVA语言实现了WEB的SSO单点登录功能, 实例共有三个项目, SSOWebDemo1, SSOWebDemo2为应用项目, SSOAuth为SSO的授权项目, 当访问SSOWebDemo1或者SSOWebDemo2项目时, 由于未登录, 页面跳转到SSOAuth的登录页面, 登录成功后,自动跳转到先前的应用项目, 当成功访问SSOWebDemo1后,无须登录即可访问SSOWebDemo2
项目对应的实例代码可以通过【下载实例】按钮获取
开发工具: Eclipse Mars, JDK1.7, TOMCAT1.7
【项目包含内容】(见下图):
介绍:
SSOAuth是SSO系统,功能:如果身份认证成功 创建SSO_ticket(认证系统票据)
SSOWebDemo1和SSOWebDemo2是两个测试用的应用系统。
准备工作:
用记事本打开 C:\Windows\System32\drivers\etc\hosts 添加几个域名:
注意: 这里的域名必须是ssoauth.com, 而且这三个需要统一, 如果换成其它域名,三个域名也要写成一致
SSOWebDemo1,SSOWebDemo2中配置了ssoauth.com, 改成其它域名后,项目中也需要作相应的改变
127.0.0.1 ssoauth.com //此域名为SSO系统域名
127.0.0.1 ssowebdemo1.ssoauth.com //以下两个分别是两个测试系统的域名 也是SSO系统的子域名
127.0.0.1 ssowebdemo2.ssoauth.com
单点登录步骤:
1.打开测试系统的test.jsp 测试系统的SSOFilter会拦截,尝试获取SSO_ticket,因第一次登录,不存在,所以跳转到SSO系统的login.jsp进行身份验证
登录用户名与密码:
wyy : wyy
paul : paul
carol : carol
2.认证不通过则跳转到SSO中的failed.html。 认证通过则在SSO系统中添加认证(SSOID),并创建一个以"WyyDesktopSOOID"为key,SSOID为value的cookie,并设置
cookie的domain为"localhost",path为"/"。最后跳转到最初请求的页面(test.jsp)。
3.再次被SSOFilter拦截,此时SSOFilter中能够获取到key为"WyyDesktopSOOID"。
4.此时执行到SSOFilter中的SSOService方法,创建HttpClient对象,并创建get方法,
url为"http://ssoauth.com:8080/SSOAuth/SSOAuth?action=authcookie&cookiename=wyy1512797775760"。
5.再次执行SSO系统中的SSOAuth,先通过processRequest获取请求参数"cookiename"的值,再将值传入到authCookie方法中,此方法会从SSOIDS中获取该value对应
的username,如果获取到,控制台输出"Authentication success!",否则输出"Authentication failed!",并将获取到的result返回。
6.登录成功后。会显示test.jsp的页面。然后测试SSOWebDemo2,发现不用验证即可访问。
【实例截图】