日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 单个用户的多重并发会话_单个用户的多重并发会话限制/限制单客户端同时登录多个用户...

發布時間:2024/4/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 单个用户的多重并发会话_单个用户的多重并发会话限制/限制单客户端同时登录多个用户... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我使用的是SSH2框架,做安全測試需要限制:1.單個用戶的多重并發會話限制 2. 限制單客戶端同時登錄多個用戶 。這兩個內容,沒有采用在web.xml中配置過濾器的方式,我處理的方式是如果一個用戶在第二臺電腦上登錄了就踢掉上一臺電腦登錄的用戶,如果同一個臺電腦有第二個用戶登錄 ,就踢掉之前登錄的帳號。

所以,是在登錄的方法中做的處理。

在登錄方法中加入如下兩行語句,作為程序的入口:

SessionListener.isAlreadyEnter(getHttpRequest().getSession(),this.getUserCode(),loginUser);

getHttpRequest().getSession().setAttribute("isLoginIn", "LoginIn");

在SessionListener類中做相關的踢出處理:

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import javax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionAttributeListener;

import javax.servlet.http.HttpSessionBindingEvent;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

import org.apache.struts2.ServletActionContext;

import com.hhwy.iepip.framework.message.Message;

import com.opensymphony.xwork2.ActionContext;

public class SessionListener implements HttpSessionListener,ServletRequestListener,HttpSessionAttributeListener{

public static Map sessionMap = new HashMap();

public static Map sessionMap1 = new HashMap();

private static Boolean onlyOne = Boolean.valueOf(Message.getMessage("session.onlyone"));

private HttpServletRequest request ;

/**獲取request對象*/

public void requestInitialized(ServletRequestEvent event) {

request = (HttpServletRequest)event.getServletRequest();

}

/**以下是實現HttpSessionListener中的方法:該方法登錄與否都會執行**/

public void sessionCreated(HttpSessionEvent se){

}

/**以下是實現HttpSessionListener中的方法**/

public void sessionDestroyed(HttpSessionEvent se){

hUserName.remove(se.getSession().getId());

UserObject.remove(se.getSession().getId());

if(sessionMap!=null){

sessionMap.remove(se.getSession().getId());

}

if(sessionMap1!=null){

sessionMap1.remove(se.getSession().getId());

}

}

/**

* isAlreadyEnter-用于判斷用戶是否已經登錄以及相應的處理方法

*

*/

public static boolean isAlreadyEnter(HttpSession session,String sUserName,LoginUserInfo loginTriggers){

boolean flag = false;

return flag;

}

/**

* 此方法,可以在登錄時候添加一個session 用以判斷是否已經登錄,然后再進行登錄人登錄控制

*/

public void attributeAdded(HttpSessionBindingEvent event) {

//如果只允許一個賬號一處登陸,單臺客戶端電腦只允許一個用戶登錄

if(onlyOne.booleanValue()){

String name = event.getName();

if(name.equals("isLoginIn")){

// 單臺客戶端電腦只允許一個用戶登錄

String ipAddr = this.getIpAddr(request);

//如果原先已登錄,則踢出原先登陸的

if(sessionMap1.containsKey(ipAddr) ){

try{

sessionMap1.get(ipAddr).invalidate();

}catch(Exception e){}

sessionMap1.remove(ipAddr);

}

if(ipAddr != null && event.getSession().isNew())

sessionMap1.put(ipAddr, event.getSession());

//只允許一個賬號一個客戶端登陸

String userName= getUserName(event);

if(sessionMap.containsKey(userName) ){

try{

sessionMap.get(userName).invalidate();

}catch(Exception e){}

sessionMap.remove(userName);

}

if(userName != null && event.getSession().isNew())

sessionMap.put(userName, event.getSession());

}

}

}

public static String getIpAddr(HttpServletRequest request) {

String ip = request.getHeader("x-forwarded-for");

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("Proxy-Client-IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("WL-Proxy-Client-IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getRemoteAddr();

}

return ip;

}

/*獲取session中存儲的用戶名*/

private String getUserName(HttpSessionBindingEvent se) {

String userName = null;

return userName;

}

public void attributeRemoved(HttpSessionBindingEvent event) {

// TODO Auto-generated method stub

}

public void attributeReplaced(HttpSessionBindingEvent arg0) {

// TODO Auto-generated method stub

}

public void requestDestroyed(ServletRequestEvent arg0) {

// TODO Auto-generated method stub

}

}

總結

以上是生活随笔為你收集整理的java 单个用户的多重并发会话_单个用户的多重并发会话限制/限制单客户端同时登录多个用户...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。