java自動登入功能和記住使用者名稱功能
阿新 • • 發佈:2018-12-12
實現在這兩個功能,都需要用到coolie技術,將所需要的使用者名稱或者密碼帶到瀏覽器端,實現使用者名稱和密碼的記錄,然後完成所要的功能。 一、自動登入功能
- 後臺的程式碼 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; } } } }
- 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"> 記住使用者名稱