Java实现的以SSM或SSH框架为核心的登录认证功能(重复登录,前一个用户登出,可手动开启关闭)

1、创建一个session的监听器

import java.util.HashMap;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.rails.system.model.manage.Users;

//实现HttpSessionListener接口的方法
public class SessionListener implements HttpSessionListener {

	public static HashMap sessionMap = new HashMap();
	//初始化
	public void sessionCreated(HttpSessionEvent hse) {
		HttpSession session = hse.getSession();
	}
	//销毁
	public void sessionDestroyed(HttpSessionEvent hse) {
		HttpSession session = hse.getSession();
		this.DelSession(session);
	}
	//清除session的方法
	public static synchronized void DelSession(HttpSession session) {
		if (session != null) {
			// 删除单一登录中记录的变量
			if (session.getAttribute("users") != null) {
				Users user = (Users) session.getAttribute("users");
				SessionListener.sessionMap.remove(user.getLogonId());
			}
		}
	}
}

2、在数据库中建一个表,一个列是主键,一个列是0或1。0:关闭,1:开启。

IDCHOOSEN
主键认证——0:关闭,1:开启。

3、完善dao,service及其实现类的 update、和select相关全部功能。

?:2、3步骤过于简单无赘述。

4、Controller中添加:前一个用户登出的方法

    /**
     * 强制前一个用户退出
     * @param uanme
     */
	public static void forceLogoutUser(String uanme) {
		// 如果在之前的session中取到了,证明是重复登录
		if (SessionListener.sessionMap.get(uanme) != null) {
                        //调用1步骤的Session监听器
			HttpSession hs = (HttpSession) SessionListener.sessionMap.get(uanme);
			SessionListener.sessionMap.remove(uanme);
			Enumeration e = hs.getAttributeNames();
			while (e.hasMoreElements()) {
				String sessionName = (String) e.nextElement();
				// 清空session
				hs.removeAttribute(sessionName);
			}
		}
	}

5、Controller中添加:更新用户状态

public void updateUserLogin(HttpSession session, Users user) throws Exception {
		// 如果在之前的session中取到了,证明是重复登录
		if (null != SessionListener.sessionMap.get(user.getLogonId())) {
			// 调用4中的方法,前一个登录的用户session销毁
			forceLogoutUser(user.getLogonId());
			// 添加本次登录用户的	帐号	
                           SessionListener.sessionMap.put(user.getLogonId(), session);
		} else {
			// 以用户id为key键存入map中,以判断下一次登录的人
			SessionListener.sessionMap.put(user.getLogonId(), session);
		}
	}

6、在控制登录的Controller的方法中添加代码


//获取用户登录名保存到session中,user是方法中的形式参数
request.getSession().setAttribute("uname", user.getLogonId().toString());
//声明一个list父类,实例化一个ArrayList子类
List<Map<?,?>> list = new ArrayList<Map<?,?>>();
//使用之前2、3定义的查询方法,获取CHOOSEN是0还是1,如果是0则不启动,1就启动
list =XXXService.getChoosen();
//认证
String choosen="";
//foreach取到choosen的值,key是数据库的列名
for (Map<?, ?> map : list) {
    choosen= map.get("CHOOSEN").toString();
}
if("1".equals(choosen)){//若认证状态为1:开启状态
    //启用登录认证方法
    updateUserLogin(session,user);
}

 

7、手动开启或关闭用2、3步骤的update方法即可。新建页面实现。

                

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值