WEB管理员删除在线用户的处理办法

最近用户抱怨使用二个浏览器登录WEB界面,一台登录管理员,另外一台登录普通用户,管理员在删除当前普通用户以后,这个普通用户还能继续做其他的操作。按照他们的想法是这个普通户用被踢出去。

经过检查发现现有的代码修改起来很是麻烦,于是就打算把所有的登录用户信息放在APPLICATION里面,然后当管理员删除某个用户的时候拿到所有的MAP记录,找到需要删除的用户然后停掉SESSION。

处理的办法
Setp1:写一个过滤器,得到所有登录用户的信息.


<filter>
<filter-name>CheckUserOnline</filter-name>
<filter-class>com.warlock.stat.cdrgui.util.UserSingleFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>CheckUserOnline</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>




import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.warlock.stat.cdrgui.admin.app.web.common.SessionManager;
import com.warlock.stat.cdrgui.admin.entity.UserInfo;

public class UserSingleFilter implements Filter{

private Logger log = Logger.getLogger(getClass());
private FilterConfig filterConfig;

@Override
public void destroy() {
this.filterConfig = null;

}


/**
* Check the user login and store the all user info into application
* @param req - ServletRequest
* @param resp - ServletResponse
* @param chain - FilterChain
*
*/
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
HttpSession session = request.getSession();

boolean isLogin = false;
if(session.getAttribute(SessionManager.SESSION_USER)!=null){
isLogin = true;
}
log.info("isLogin :"+isLogin);
if(isLogin){
UserInfo useInfo = (UserInfo)session.getAttribute(SessionManager.SESSION_USER);
String currSessionID = session.getId();
String userId = useInfo.getUserId();
Map userLoginMap = null;

if(session.getServletContext().getAttribute("userLoginMap")!=null){
userLoginMap =(Map)session.getServletContext().getAttribute("userLoginMap");
if(userLoginMap!=null && userLoginMap.size()>0){
if(!userLoginMap.containsKey(currSessionID+userId)){
userLoginMap.put(currSessionID+userId, session);
}
}else{
userLoginMap.put(currSessionID+userId, session);
}
}else{
userLoginMap = new HashMap();
userLoginMap.put(currSessionID+userId, session);
}

if(userLoginMap!=null){
session.getServletContext().setAttribute("userLoginMap", userLoginMap);
}
}
chain.doFilter(request, response);
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;

}

}


Step2:在 delete方法里面拿到MAP的所有信息,然后比较出需要删除的用户。

//When delete the online user, get the all user info from Application and termination sessions
logger.info(" Delete user name is :"+targetUser);
Map usrAllMap = null;
Map usrSpeMap = null;
if(request.getSession().getServletContext().getAttribute("userLoginMap")!=null){
usrAllMap = (Map)request.getSession().getServletContext().getAttribute("userLoginMap");
if(usrAllMap!=null && usrAllMap.size()>0){
String tmpKey = null;
Iterator iterator = usrAllMap.keySet().iterator();
usrSpeMap = new HashMap();
String strValue = "";
while (iterator.hasNext()){
tmpKey = iterator.next().toString();
if(tmpKey.endsWith(targetUser)){
HttpSession sessiontmp = (HttpSession)usrAllMap.get(tmpKey); sessiontmp.removeAttribute(SessionManager.SESSION_USER);
sessiontmp.invalidate();
usrSpeMap.put(tmpKey, strValue);
logger.info("Remove the online user");
}
}
if(usrSpeMap!=null && usrSpeMap.size()>0){
Iterator iteUsrMap = usrSpeMap.keySet().iterator();
while(iteUsrMap.hasNext()){
logger.info("Remove the user from Map");
usrAllMap.remove(iteUsrMap.next());
}
}
}
}


本来管理员是不可以删除当前在线用户的,但是既然要改,也是没有办法的。只能采用这样的办法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值