天天看點

使用者賬号自動登入--解決方案

案例1:
賬号自動登入:
   1.思想
      使用Filter、cookie、session     步驟:
     首先建立基本的登入邏輯,就是連接配接上資料庫可以進行簡單的登入;
    項目架構:
     com.itheima.daoimp
        |--UserDaoimp
      com.itheima.domain
        |--User
      com.itheima.filter
        |--AutoLoginFilter
        |--Ucodeing  統一編碼處理過濾器
      com.itheima.web.servlet
        |--UserLoginservlet
      com.itheima.utils
        |--JdbcUtils
        |--MyBeanUtils     核心jar:
      mysql-connector-java-5.1.22-bin.jar   //mysql連接配接jar
       mchange-commons-java-0.2.3.jar      //依賴包
       commons-logging-1.1.1.jar     //第三方log包,依賴包---log4j.jar
       commons-dbutils-1.4.jar       //jdbc封裝工具類
       commons-beanutils-1.8.3.jar   //bean封裝工具類
       c3p0-0.9.2-pre5.jar          //c3p0 資料庫依賴包       c3p0-config.xml  //資料庫連接配接池配置檔案
      (一)簡單的不進行闡述:直接上主要邏輯地方
         1.UserLoginservlet中進行登入判斷,如果登入成功則,将從資料庫查詢出來的beanuser
         存儲到session中
         2.判斷V(視圖層)是否點選了,記住密碼複選框按鈕。如果點選了
            将使用者名和密碼進行存儲Cookie持久化處理
             cookie.setMaxAge(60*60*24); //一天
              cookie.setpath("/")
              respond.addCookie();      (二) |建立過濾器 AutoLoginFilter,進行登入的邏輯判斷
               1.首先判斷session中是否存在user對象
                1.1    User loginUser = (User) req.getSession().getAttribute("Loginuser");
                 1.2   如過存在(loginUser!=null) 則過濾器進行放行 chain.doFilter(); return;
                1.3   判斷cookie中是否有值,(使用者是否點選了記住密碼)
            /**
         * 判斷cookie中是否有值
         */
        String autoLogin = null;
        Cookie currentCookie = null;
        Cookie[] cookies = req.getCookies();
        if (cookies != null) {
         for (Cookie oldLogin : cookies) {
          if ("loginUser".equals(oldLogin.getName())) {
           // 得到目标cookie
           autoLogin = oldLogin.getValue();
           // 拿到了之前的cookie
           currentCookie = oldLogin;
           break;
          }
         }
        }    1.4 如果cookie中沒有存在值 (autoLogin==null) chain.doFilter()----return;
     
     1.5  如果讀取到了值則進行處理,設定登入邏輯               /**
         * 如果cookie中有值 進行處理
         */       String username = auto[0];
        String password = auto[1];       User user = new User(username, password);
           User  reuser = new Userservice().find(user);                 1.6判斷邏輯,如果的使用者登入過之後。cookie記住了之前的cookie資訊,但是在登入之前user資訊密碼改了
                 。導緻無法登入,之前的cookie資訊,無效,但是還儲存在記憶體中,持久化。
                   那麼我們需要進行清理無效的cookie                    是以,進行清除。
                if (loginUser == null) {
                 //清楚無用的cookie
         currentCookie.setMaxAge(0);
         currentCookie.setPath("/");
         res.addCookie(currentCookie);
         
         chain.doFilter(request, response);        return;
        }          1.7
            // 登入
      req.getSession().setAttribute("Loginuser", reuser);
      chain.doFilter(request, response);      

繼續閱讀