jsp怎样解决一个用户异地同时登陆
新手~ 请各位大虾能说清楚一点 谢谢鸟
------解决方案--------------------
------解决方案--------------------写个 在线用户列表,
每次登陆之前 去查询这个列表
------解决方案--------------------package com.huina.sysframework.listener;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import com.heating.application.agent.common.Constants;
import com.heating.application.agent.common.DateUtils;
import com.heating.application.agent.common.ExceptionStackInfo;
import com.heating.application.agent.common.IpAddress;
import com.heating.application.agent.common.MyLogger;
import com.heating.application.agent.common.ServiceManager;
import com.heating.application.agent.dto.extend.pub.SessionInfo;
import com.heating.application.agent.dto.extend.user.GeneralUserDto;
/**
* 单点登陆
* @author Administrator
*/
public class OnLineSessionListener implements HttpSessionAttributeListener {
private Map<String, Object> userMap = new HashMap<String, Object>();
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
HttpSession session = arg0.getSession();
//获取用户信息
GeneralUserDto userDto = ((SessionInfo) session.getAttribute("sessionInfo")).getGeneralUserDto();
//用SESSION的唯一ID做KEY。将用户放入
userMap.put(session.getId(), userDto);
// 把用户表是否登陆字段改为1
userDto.setIsLogin(Constants.USER_ISLOGIN_LOGIN);
try {
ServiceManager.user.getUserManagerService().updateGeneralUserDto(
userDto);
} catch (Throwable e) {
MyLogger.getLoggerByName("errorLogger").error(ExceptionStackInfo.getExceptionInfo(e));
}
// 写登陆日志
setUserLoginLogger(userDto);
System.out.println(userDto.getUserName() + "进入系统");
System.out.println("___________________________________");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
HttpSession session = arg0.getSession();
// 获取SESSION的ID
String key = session.getId();
// 获取移除的用户
GeneralUserDto userDto = (GeneralUserDto) userMap.get(key);
try {
userDto = ServiceManager.user.getUserManagerService().
loadGeneralUserDto(userDto.getUserId());
// 把用户表是否登陆字段改为0
userDto.setIsLogin(Constants.USER_ISLOGIN_NOLOGIN);
ServiceManager.user.getUserManagerService().updateGeneralUserDto(
userDto);
} catch (Throwable e) {
MyLogger.getLoggerByName("errorLogger").error(ExceptionStackInfo.getExceptionInfo(e));
}
// 写离开日志
setUserLogoutLogger(userDto);
System.out.println(userDto.getUserName() + "离开系统");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent se) {
}
// 登陆日志
private void setUserLoginLogger(GeneralUserDto userDto){
MyLogger.getLoggerByName("loginLogger").info(
userDto.getUserName() + "在"
+ DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")
+ "登陆系统,Ip地址为:" + IpAddress.getIpAddr());
}
// 离开日志
private void setUserLogoutLogger(GeneralUserDto userDto){
MyLogger.getLoggerByName("loginLogger").info(
userDto.getUserName() + "在"
+ DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")
+ "离开系统");
}
}
------解决方案--------------------