在java中如何实现单点登陆

Python018

在java中如何实现单点登陆,第1张

单点登录(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,完成单点登出。