第四天·单点登录

 

单点登录,即Single Sign On,简称SSO。下面通过SessionListion做一个简单单点登录功能。

1 准备

导入servlet-api.jar

2 开发

  • 开发SessionListener.java

package com.exam.listener;

import javax.servlet.http.*;  
import java.util.*;    
  
public class SessionListener implements HttpSessionListener {  
  
  
    // 保存sessionID和username的映射  
    private static HashMap hUserName = new HashMap();  
  
  
    /** 以下是实现HttpSessionListener中的方法* */  
    public void sessionCreated(HttpSessionEvent se) { 
        System.out.println("this is sessionCreated");
        System.out.println("当前session为:"+se.getSession().getId());
        System.out.println(SessionListener.isAlreadyEnter(se.getSession(), "admin"));
    }  
  
  
    public void sessionDestroyed(HttpSessionEvent se) {  
        hUserName.remove(se.getSession().getId());  
    }  
  
  
    /** 
     * isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法 
     *  
     * @param sUserName 
     *            String-登录的用户名称 
     * @return boolean-该用户是否已经登录过的标志 
     */  
    public static boolean isAlreadyEnter(HttpSession session, String sUserName) {  
        boolean flag = false;  
        // 如果该用户已经登录过,则使上次登录的用户掉线(依据使用户名是否在hUserName中)  
        if (hUserName.containsValue(sUserName)) {  
            flag = true;  
            // 遍历原来的hUserName,删除原用户名对应的sessionID(即删除原来的sessionID和username)  
            Iterator iter = hUserName.entrySet().iterator();  
            while (iter.hasNext()) {  
                Map.Entry entry = (Map.Entry) iter.next();  
                Object key = entry.getKey();  
                Object val = entry.getValue();  
                if (((String) val).equals(sUserName)) {  
                    hUserName.remove(key);  
                }  
            }  
            // 添加现在的sessionID和username  
            hUserName.put(session.getId(), sUserName);  
            System.out.println("hUserName   =   " + hUserName);  
        } else {// 如果该用户没登录过,直接添加现在的sessionID和username  
            flag = false;  
            hUserName.put(session.getId(), sUserName);  
            System.out.println("hUserName   =   " + hUserName);  
        }  
        return flag;  
    }  
  
  
    /** 
     * isOnline-用于判断用户是否在线 
     *  
     * @param session 
     *            HttpSession-登录的用户名称 
     * @return boolean-该用户是否在线的标志 
     */  
    public static boolean isOnline(HttpSession session) {  
        boolean flag = true;  
        if (hUserName.containsKey(session.getId())) {  
            flag = true;  
        } else {  
            flag = false;  
        }  
        return flag;  
    }  
}
  • 在web.xml文件下配置listener
   
   
com.exam.listener.SessionListener   
   
  

以上代码参考这篇文章:https://www.cnblogs.com/sdgf/p/4909166.html

3 总结

单点登录是目前比较流行的企业业务整合的解决方案之一。本人却是刚开始接触,不甚了解,有待以后慢慢学习和掌握。

 

 

你可能感兴趣的:(考试管理系统)