Javawebではリスナーの操作を実現し、重複ログインの検証を行う
その前に、重複登録がどのように判断されているかを知る必要があります:1.ユーザがログインを行う場合、情報はセッションに存在して情報の伝達を行う.2.セッション転送中にH t t p S e ssionAttributeListenerのaddを使用してリスニング操作が可能であることが分かる.セッションはサーバ上に存在するクライアントではない.ログインブラウザのたびに、識別識別のために対応するsessionIdが生成され、コンテンツは接続されています.
では、私たちは1つの操作を行うことができます.sessionはサービス側が存在しているので、sessionに対する操作を行うことができます.そうすれば、すべての内容を実現することができます.
コンテンツをインスタンス化してデータの格納を行い、セッションの操作を行う
seesionAttributeListener操作を行う:sessionの判断を行う
その前にsession操作の内容を理解する必要があります:1.セッションを
これにより、ユーザーがログインを繰り返すとトップ番号操作が可能になります!
では、私たちは1つの操作を行うことができます.sessionはサービス側が存在しているので、sessionに対する操作を行うことができます.そうすれば、すべての内容を実現することができます.
コンテンツをインスタンス化してデータの格納を行い、セッションの操作を行う
package cn.java.Cache;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
/*
* , ;
* ,instance;
* sessionId, ;
* sessionId session ;
*/
public class LoginCache {
// instance ;intance
private static LoginCache instance = new LoginCache();
// MAP sessionId
private Map<String, String> loginUserSession = new HashMap<String, String>();
// session
private Map<String,HttpSession> loginSession = new HashMap<String, HttpSession>();
private LoginCache() {
}
// , ,
public static LoginCache getInstance() {
return instance;
}
//
public String getSessionIdByUserName(String username)
{
//
return loginUserSession.get(username);
}
public HttpSession getSessionBySessionId(String sessionId)
{
// map
return loginSession.get(sessionId);
}
//
public void setSessionIdByUserName(String username,String sessionId)
{
loginUserSession.put(username, sessionId);
}
public void setSessionBySessionId(String SessionId,HttpSession session)
{
loginSession.put(SessionId, session);
}
}
seesionAttributeListener操作を行う:sessionの判断を行う
package cn.java.Listener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import cn.java.Cache.LoginCache;
/**
* session , HttpSessionAttributeListener ;
* session , session ;
* session , ;
* @author XXXIERW
*
*/
public class LoginSessionAttributeListener implements HttpSessionAttributeListener {
private static final String Login_User = "loginName";// session
@Override
public void attributeAdded(HttpSessionBindingEvent hsbe) {
// session ,
System.out.println(" session ");
String attrName = hsbe.getName();// session , session
if(attrName == Login_User)
{
// session
String attrVal = (String)hsbe.getValue();// session
HttpSession session = hsbe.getSession();
String sessionId = session.getId();// session Id;
// map sessionId,
String sessionId2 = LoginCache.getInstance().getSessionIdByUserName(attrVal);
if(sessionId2 == null)
{
}else {
//
HttpSession session2 = LoginCache.getInstance().getSessionBySessionId(sessionId2);
session2.invalidate();// session, session
}
LoginCache.getInstance().setSessionIdByUserName(attrVal, sessionId);//sessionId
LoginCache.getInstance().setSessionBySessionId(sessionId, session);
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent hsbe) {
// TODO Auto-generated method stub
}
@Override
public void attributeReplaced(HttpSessionBindingEvent hsbe) {
// TODO Auto-generated method stub
}
}
その前にsession操作の内容を理解する必要があります:1.セッションを
loginUserName
という名前のセッションとして格納、判断を行う.そして、重複データがあれば前のセッションId識別子を行い、前のクリアを行うと判断する.これにより、ユーザーがログインを繰り返すとトップ番号操作が可能になります!