java自動登錄功能和記住用戶名功能

實現在這兩個功能,都需要用到coolie技術,將所需要的用戶名或者密碼帶到瀏覽器端,實現用戶名和密碼的記錄,然後完成所要的功能。
一、自動登錄功能

  1. 後臺的代碼
    1.1、後臺servlet中的代碼
//1、判斷是否勾選了自動登錄的複選框
            String autoLogin = request.getParameter("autoLogin");
            //自動登錄
            if("autoLogin".equals(autoLogin)){
                //勾選了複選框 回寫一個帶有用戶名和密碼的cooke
                Cookie cookie = new Cookie("autoLogin", user.getUsername() + "#" + user.getPassword());
                //設置存活的時間
                cookie.setMaxAge(60*60*12*7);//設置7天
                //設置路徑
                cookie.setPath("/");
                //回寫cookie
                response.addCookie(cookie);

                response.sendRedirect(request.getContextPath()+"/index.jsp");
                return;
            }

1.2、 後臺filter中的代碼

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        // 將reqeust,  先強轉
        HttpServletRequest request = (HttpServletRequest) req;

        // 判斷用戶是否已經登錄, 如果已經登錄,  直接放行
        User existUser = (User) request.getSession().getAttribute("user");
        if(existUser!=null){

            //進來, 則說明 已經登錄,則 直接放行
            chain.doFilter(request,resp);
            return;
        }else{

            //說明沒有登錄,  那麼就 幫助 用戶自動登錄

            //獲得目標的 coookie
            Cookie[] cookies = request.getCookies();

            Cookie targetCookie = CookieUtils.findTargetCookie(cookies, "autoLogin");

            if(targetCookie==null){
                //進來,則說明根本都沒有帶 目標 cookie 過來, 那麼 不能 自動登錄, 則
                // 直接放行
                chain.doFilter(request,resp);
                return;
            }else{
                // 進來,則說明找到了 目標名稱的cookie , 進一步獲得
                // username 和password

                // autologin   = zs#itheima#202cb962ac59075b964b07152d234b70
                String value = targetCookie.getValue();

                String username = value.split("#")[0];
                String password = value.split("#")[1];              
                System.out.println("username : " + username);
                System.out.println("password : " + password);

                //  還是要再次 查詢一下.
                UserService us = new UserServiceImpl();
                User loginUser = us.findUserPwd(username, password);
                if(loginUser!=null){
                   //則說明, 找到了, 意味着 帶過來的cookie 信息是沒有問題的
                    // 幫助 用戶自動登錄
                    //注:登陸成功的標誌是 session 域中有 user 對象 此處登錄成功之後,將user對象存入到 session域中                    request.getSession().setAttribute("user",loginUser);
                    //放行
                    chain.doFilter(request,resp);
                    return;
                }else{
                    //說明 cookie的信息有問題... 登錄不了
                    //放行
                    chain.doFilter(request,resp);
                    return;
                }
            }
        }
    }
  1. 3、後臺工具類 util 中的代碼
public class CookieUtils {

    /**
     *     調用這個 api ,可以從 cookies的數組中找到 目標名稱的cookie 對象
     *
     * @param cookies . cookie的數組
     * @param name  , 目標cookie的 name, 名稱
     * @return
     */
    public static Cookie findTargetCookie(Cookie[] cookies , String name){
        if(cookies==null){
            return null;
        }

        for (Cookie cookie: cookies ) {
            if(name.equals(cookie.getName())){

                //進來,則說明找到了 目標名稱的cookie對象
                return cookie;
            }
        }
        return null;
    }
}


二、記住用戶名功能
1.1. 後臺的代碼

//獲取前臺傳過來的記住用戶名的input中的name的屬性
String remeber = request.getParameter("remeber");
            //回寫用戶名
            if("remeber".equals(remeber)){//當勾選的記住按鈕的時候
                System.out.println(remeber+"我是remeber");
                Cookie cookie = new Cookie("remeber", user.getUsername());
                //設置存貨時間
                cookie.setMaxAge(60*60*24*4);//存貨4天的時間
                //設置訪問的路徑
                cookie.setPath("/");
                //回寫cooki
                response.addCookie(cookie);
            }else {//當沒有記住勾選了按鈕的時候,清除cookie的信息
                Cookie cookie = new Cookie("remeber", "");
                cookie.setMaxAge(0);
                cookie.setPath("/");
                response.addCookie(cookie);
            }

1.2 前臺的代碼

 1.2.1 、JSP 的代碼
<%  //java
		String username="";
		//或得瀏覽器中的cookie
		Cookie[] cookies=request.getCookies();
		if(cookies!=null&&cookies.length>0){
			//遍歷Cookie
			for(int i=0;i<cookies.length;i++){
				Cookie cookie=cookies[i];
				//此處類似與Map有name和value兩個字段,name相等才賦值,並處理編碼問題
				if("remeber".equals(cookie.getName())){
					username=java.net.URLDecoder.decode(cookie.getValue(),"utf-8");
				}

			}
		}
		//將username保存到session域中
		request.getSession().setAttribute("username",username);
	%>

 1.2.2 、html 的代碼

<input type="checkbox" name="remeber" value="remeber"> 記住用戶名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章