第四天·单点登录

 

单点登录,即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
<listener>   
<listener-class>   
com.exam.listener.SessionListener   
</listener-class>   
</listener>  

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

3 总结

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值