强制下线的实现

import java.util.HashMap;
import java.util.Map;

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

import cn.readsty.entity.User;

/**
 * 
 * @author [email protected]
 *
 */
public class UserSessionListener  implements HttpSessionListener{ 
	/**保存sessionID和user的映射 */
    private static Map<String,User> userPool = new HashMap<String,User>();
    /**以下是实现HttpSessionListener中的方法**/ 
    public void sessionCreated(HttpSessionEvent se){ 
    } 
    
    public void sessionDestroyed(HttpSessionEvent se){ 
        userPool.remove( se.getSession().getId() ); 
    } 
    /* 
     * isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法 
     * @param sUser -登录的用户Bean
     * @return boolean-该用户是否已经登录过的标志 
     */ 
    public static boolean isAlreadyEnter(HttpSession session,User sUser){ 
        boolean flag = false; 
        if(isHas(sUser)){//如果该用户已经登录过,则使上次登录的用户掉线(依据使用户是否在userPool中) 
            flag = true; 
            //遍历原来的userPool,删除原用户名对应的sessionID(即删除原来的sessionID和User) 
            User user;
            for(String key : userPool.keySet()){
            	user = userPool.get(key);
            	if(sUser.equals(user)){
            		 userPool.remove(key);
            	}
            }
            userPool.put( session.getId(),sUser);//添加现在的sessionID和username 
        } 
        else{//如果该用户没登录过,直接添加现在的sessionID和User 
            flag = false; 
            userPool.put( session.getId(),sUser ); 
        } 
        return flag; 
    } 
    
	public static boolean isHas(User user){
		if(null != user){
			for(String key : userPool.keySet()){
				if(user.equals(userPool.get(key))){
					return true;
				}
			}
		}
		return false;
	}
    /* 
     * isOnline-用于判断用户是否在线 
     * @param session HttpSession-登录的用户名称 
     * @return boolean-该用户是否在线的标志 
     */ 
    public static boolean isOnline(HttpSession session){ 
        boolean flag = true; 
        if( userPool.containsKey( session.getId() ) ){ 
            flag = true; 
        } 
        else{ 
            flag = false; 
        } 
        return flag; 
    } 
}


import java.io.IOException;

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 cn.readsty.common.UserSessionListener;
import cn.readsty.service.manager.Constant;

/**
 * 过滤器用于过滤用户是否登录
 * @author [email protected]
 *
 */
public class IsLoginFilter implements Filter {

	public void destroy() {
		// TODO Auto-generated method stub

	}

	public void doFilter(ServletRequest cRequest, ServletResponse cResponse,
			FilterChain chain) throws IOException, ServletException {
		
		HttpServletRequest request = (HttpServletRequest)cRequest;
		HttpServletResponse response = (HttpServletResponse)cResponse;
		HttpSession session = request.getSession();
		/**如果session中没有保存用户的登录信息*/
		if(null == session.getAttribute(Constant.USER_INFO_IN_SESSION)){
			request.setAttribute("message", 2);
			request.getRequestDispatcher("/logout.jsp").forward(request, response);
		/**如果在线用户池中无该用户*/
		}else if(!UserSessionListener.isOnline(session)){
			request.setAttribute("message", 3);
			request.getRequestDispatcher("/logout.jsp").forward(request, response);
		}else{
			chain.doFilter(cRequest,cResponse);
		}

	}
	


	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

}

你可能感兴趣的:(jsp,bean,servlet)