单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
package DesktopSSO
import java.io.*
import java.net.*
import java.text.*
import java.util.*
import java.util.concurrent.*
import javax.servlet.*
import javax.servlet.http.*
public class SSOAuth extends HttpServlet {
static private ConcurrentMap accounts
static private ConcurrentMap SSOIDs
String cookiename="WangYuDesktopSSOID"
String domainname
public void init(ServletConfig config) throws ServletException {
super.init(config)
domainname= config.getInitParameter("domainname")
cookiename = config.getInitParameter("cookiename")
SSOIDs = new ConcurrentHashMap()
accounts=new ConcurrentHashMap()
accounts.put("wangyu", "wangyu")
accounts.put("paul", "paul")
accounts.put("carol", "carol")
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter()
String action = request.getParameter("action")
String result="failed"
if (action==null) {
handlerFromLogin(request,response)
} else if (action.equals("authcookie")){
String myCookie = request.getParameter("cookiename")
if (myCookie != null) result = authCookie(myCookie)
out.print(result)
out.close()
} else if (action.equals("authuser")) {
result=authNameAndPasswd(request,response)
out.print(result)
out.close()
} else if (action.equals("logout")) {
String myCookie = request.getParameter("cookiename")
logout(myCookie)
out.close()
}
}
.....
}
1、在普通站点A,B上配置过滤器,如果访问到A的页面时,先访问本地SESSION看是否登录,如果没有,则访问SSO看是否登录,如果没有则转到公共登录界面2、公共登录界面登录完以后写SSO的SESSION,并通过地址栏返回给A登录的用户名
3、A写本地SESSION,完成登录过程。
4、当访问B应用时,先访问本地SESSION,未登录,则同样跳转到SSO,SSO取到本地SESSION的用户名,返回给B已登录。B写本地SESSION。完成登录过程。
5、A登出时,先杀本地SESSION,调用SSO的杀全局SESSION方法,SSO清空本地SESSION,同时也清空应用B的SESSION,完成单点登出。
可以直接通过玉符科技IDAAS平台来实现单点登录,支持所有的标准协议,如果是老旧或者自研的系统,也有SDK去适配所有的开发语言,不止是java。
玉符单点登录