现在的位置: 首页 > 综合 > 正文

判断用户是否登录 及 解决用户重复登录问题

2013年10月11日 ⁄ 综合 ⁄ 共 4412字 ⁄ 字号 评论关闭

 解决用户是否登录问题:(写一个过滤器实现)

public class Check_User_LoginFilter implements Filter {

 protected FilterConfig filterConfig;

 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub
  this.filterConfig = arg0;
 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  // TODO Auto-generated method stub
  HttpServletRequest sr = (HttpServletRequest) request;
  HttpSession session = sr.getSession(); // 获得session
  Register user = (Register) session.getAttribute("userInfo");
  SessionListener sl = new SessionListener();

 

  // 判断用户是否登录,如果没有,
  if (user == null || user.equals("")) {

   // 获锝当前的URL
   String strURL = sr.getRequestURL().toString();
   // 判断是否为index.jsp或userLogin.do
   if (strURL.indexOf("/index.jsp") == -1) {
          if (strURL.indexOf("/userLogin.do") == -1) {
       ServletContext sc = filterConfig
         .getServletContext();
       RequestDispatcher rd = sc
         .getRequestDispatcher("/work/index.jsp");
       try {
        rd.forward(request, response); // 转发到index.jsp让用户登录
        // chain.doFilter(request, response);
        return;
       } catch (ServletException sx) {
        filterConfig.getServletContext().log(
          sx.getMessage());
       } catch (IOException iox) {
        filterConfig.getServletContext().log(
          iox.getMessage());
       }
      }
   }
  }
  chain.doFilter(request, response);

 }

 public void destroy() {
  // TODO Auto-generated method stub
  this.filterConfig = null;
 }

}

<!--  WEBXML 判断用户登录  -->

 <filter>
  <filter-name>Check_User_LoginFilter</filter-name>
  <filter-class>
   com.wp.app.util.Check_User_LoginFilter
  </filter-class>
 </filter>
 <filter-mapping>
  <filter-name>Check_User_LoginFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>Check_User_LoginFilter</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>Check_User_LoginFilter</filter-name>
  <url-pattern>*.html</url-pattern>
 </filter-mapping>

解决用户重复登录问题:(配置监听器实现,此处是如果重复登录将T掉上一个用户)

public   class   SessionListener   implements   HttpSessionListener{
        private   static   java.util.Hashtable   hUserName   =   new   Hashtable();
        public   void   sessionCreated(HttpSessionEvent   se){
              System.out.println( "已创建新用户session -- " + se);
        }

        public   void   sessionDestroyed(HttpSessionEvent   se){
                hUserName.remove(se.getSession());
                System.out.println( "删除用户session -- " + se);
        }

        public   synchronized   static   boolean   isLogined(HttpSession   session,String   sUserName){
            boolean   flag   =   false;
            if(hUserName.containsKey(sUserName)){
                                  flag   =   true;
                                  HttpSession   vsession   =   (HttpSession)hUserName.get(sUserName);
                                  try   {
                                      vsession.invalidate();
                                      System.out.println("用户 - " + sUserName + " || session 已存在 - " + session);
                                      System.out.println("已设置 - " + sUserName + " || session 失效并移除" );
                                  }
                                  catch   (Exception   ex){}
                          }
            else{
                    flag   =   false;
                   
            }
            hUserName.remove(sUserName);
            hUserName.put(sUserName,session);
            System.out.println("创建用户 - " + sUserName + " || session - " + session);

            return   flag;
        }

        public  synchronized static boolean deleteUserName(HttpSession   session,String sUserName)
        {
         System.out.println("删除用户 - " + sUserName + " || session - " + session);
         hUserName.remove(sUserName); //删除用户
         return true;
        }
       
        public   synchronized   static   boolean   isOnline(HttpSession   session,String sUserName){
                boolean   flag   =   false;
                 HttpSession   vsession = null;
                 try{
                    vsession   =   (HttpSession)   hUserName.get(sUserName);
                 }catch(Exception e){
                  
                 }
                    if(vsession != null){
                     if   (session.getId().equals(vsession.getId()))   {
                         flag   =   true;
                     }   else   {
                         flag   =   false;
                     }
        }
                    return   flag;

        }
}

 

  <!-- WEBXML 配置监听器 -->
   <listener>
        <listener-class>com.lihong.wp.web.action.loginAction.SessionListener</listener-class>
    </listener>

抱歉!评论已关闭.