SSO单点登录解决方案 - 编程入门网
failed.html").forward(request, response);
else {
String gotoURL = request.getParameter("goto");
String newID = createUID();
SSOIDs.put(newID, username);
Cookie wangyu = new Cookie(cookiename, newID);
wangyu.setDomain(domainname);
wangyu.setMaxAge (60000);
wangyu.setValue(newID);
wangyu.setPath("/");
response.addCookie(wangyu);
System.out.println("login success, goto back url:" + gotoURL);
if (gotoURL != null) {
PrintWriter ut = response.getWriter();
response.sendRedirect(gotoURL);
out.close();
}
}
}
handlerFromLogin()这个方法是用来处理来自login.jsp的登录请求。它的逻辑 很简单:将用户输入的用户名和密码与预先设定好的用 户集合(存放在accounts中)相比较,如果用户 名或密码不匹配的话,则返回登录失败的页面(failed.html),如果登录成功的话,需要为用 户当前 的session创建一个新的ID,并将这个ID和用户名的映射关系存放到SSOIDs中,最后还要将这个ID设置为 浏览器能够保存的cookie 值。 登录成功后,浏览器会到哪个页面呢?那我们回顾一下我们是如 何使用身份认证服务的。一般来说我们不会直接访问身份服务的任何URL,包括 login.jsp。身份服务是 用来保护其他应用服务的,用户一般在访问一个受SSOAuth保护的Web应用的某个URL时,当前这个应用会 发现当前的 用户还没有登录,便强制将也页面转向SSOAuth的login.jsp,让用户登录。如果登录成功后 ,应该自动的将用户的浏览器指向用户最初想访问的那 个URL。在handlerFromLogin()这个方法中,我 们通过接收“goto”这个参数来保存用户最初访问的URL,成功后便重新定向到这个页 面中 。 另外一个要说明的是,在设置cookie的时候,我使用了一个setMaxAge(6000)的方法。这个方 法是用来设置cookie的有效期,单位是 秒。如果不使用这个方法或者参数为负数的话,当浏览器关闭的 时候,这个cookie就失效了。在这里我给了很大的值(1000分钟),导致的行为是:当你 关闭浏览器( 或者关机),下次再打开浏览器访问刚才的应用,只要在1000分钟之内,就不需要再登录了。我这样做 是下面要介绍的桌面SSO中所需要的功 能。 其他的方法更加简单,这里就不多解释了。 3.2.2具有SSO功能的web应用源代码解析 要实现WEB-SSO的功能,只有身份认证服务是不够的。这点很显然,要想使多个应用具有单点登录的 功能,还需要每个应用本身的配合:将自己的身份认证的 服务交给一个统一的身份认证服务-SSOAuth 。SSOAuth服务中提供的各个方法就是供每个加入SSO的Web应用来调用的。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |