filter完成自動登錄的代碼實現

1,定義個javabean類,按照賬號和密碼設置變量定義好user類.

2,建一個servlet的包,定義一個處理登錄界面的邏輯servlet,然後按照步驟編寫代碼

     protected voiddoGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {

           //獲取提交的數據,組織爲 JavaBean

           Useruser = newUser();

           Stringusername = request.getParameter("username");

           Stringpassword = request.getParameter("password");

           user.setUsername(username);

           user.setPassword(password);

           //查詢數據庫,當前直接認爲用戶合法

           //判斷是否設置爲自動登陸

           Stringauto = request.getParameter("auto");

           //如果是,那麼將賬號密碼設置進 Cookie

           Cookiec = newCookie("user",username + "@"+ password);

           if("yes".equals(auto)){

                 c.setMaxAge(60 * 60 * 24 * 7);

           }else {

                 c.setMaxAge(0);

           }

           response.addCookie(c);

          

           //將用戶設置進 session

           //request.setAttribute("user", user);

           request.getSession().setAttribute("user", user);

           //請求轉發到 index.jsp

           request.getRequestDispatcher("/index.jsp").forward(request, response);

      }

這裏index.jsp就是默認的首頁登錄界面.auto是在輸入賬號密碼的jsp裏設置的input的屬性,

  <input type="checkbox"name="auto" value="yes">自動登錄

                                                  </label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<label> <input

                                                        type="checkbox"> 記住用戶名

3,創建過濾器

      public voiddoFilter(ServletRequest request,ServletResponse response, FilterChain chain) throwsIOException, ServletException {

           Useruser = null;

           //強轉換來獲取request.Cookie

           HttpServletRequestr = (HttpServletRequest)request;

           //獲取cookie

           Cookie[]cs = r.getCookies();

           //判斷cookie是否存在,也就是判斷之前是否已經登陸過一次網頁

           if(cs!=null){

                 for (Cookie c: cs) {

                      if("user".equals(c.getName())){

                      //獲取遍歷後c的值(賬號和密碼)根據@來進行切割

                      String[]arr = c.getValue().split("@");

                      //arr[0]是賬號arr[1]是密碼

                      user.setPassword(arr[1]);

                      user.setUsername(arr[0]);

                      //講獲取到的值傳給session,進行下一步的頁面訪問

                      r.getSession().setAttribute("user", user);

                      }

                 }

           }

           //放行語句

           chain.doFilter(request,response);

      }

這樣再form表單裏設置好屬性,把獲取到網頁輸入的賬號的標籤裏設置成屬性name=”username”, 把獲取到網頁輸入的密碼的標籤裏設置屬性name=”password”

然後就可以run as進行調試了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章