日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cookie自动登陆

發布時間:2024/4/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cookie自动登陆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通常我們登錄某網站,會有選擇保存幾天,或者是幾個星期不用登錄,之后輸入該網站地址無需登錄直接進入主頁面,那么這就叫做自動登錄,怎么實現呢,下面我以一個小例子來演示一下

登錄頁面:login.jsp

Html代碼??
  • <span?style="font-size:?medium;"><%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%>??
  • <html>??
  • ??<head>??
  • ??</head>??
  • ??<body>??
  • ??<form?action="login.do">??
  • ????用戶名:<input?type="text"?name="username"?><br/>??
  • ????密????碼:<input?type="text"?name="password"?><br/>??
  • ??????
  • ????<input?type="submit"?value="登錄"?/><select?name="saveTime">??
  • ????<option?value="366">一年</option>??
  • ????<option?value="183">半年</option>??
  • ?????<option?value="30">一個月</option>???
  • ?????<option?value="7">一周</option>??
  • ????</select>??
  • ??</form>??
  • ??</body>??
  • </html>??
  • </span>??
  • ?

    那么從上面可看到可選擇保存自動登錄的期限,可以是一年,半年,一個月,一周,當然這都是以天為單位的

    服務類:LoginService

    Java代碼??
  • <span?style="font-size:?medium;">package?com.login.servlet;??
  • ??
  • public?class?LoginService?{??
  • ??
  • ????public?static?boolean?login(String?username,?String?password)?{??
  • ????????if?("admin".equals(username)?&&?"123456".equals(password))?{??
  • ????????????return?true;??
  • ????????}?else?{??
  • ????????????return?false;??
  • ????????}??
  • ????}??
  • }??
  • </span>??
  • 業務處理servlet:LoginServlet

    Java代碼??
  • <span?style="font-size:?medium;">package?com.login.servlet;??
  • ??
  • import?java.io.IOException;??
  • ??
  • import?javax.servlet.ServletException;??
  • import?javax.servlet.http.Cookie;??
  • import?javax.servlet.http.HttpServlet;??
  • import?javax.servlet.http.HttpServletRequest;??
  • import?javax.servlet.http.HttpServletResponse;??
  • ??
  • public?class?LoginServlet?extends?HttpServlet?{??
  • ??
  • ??
  • ????public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)??
  • ????????????throws?ServletException,?IOException?{??
  • ????????this.doPost(request,?response);??
  • ????}??
  • ??
  • ????public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)??
  • ????????????throws?ServletException,?IOException?{??
  • ?????????String?username=request.getParameter("username");??
  • ???????????String?password=request.getParameter("password");??
  • ???????????String?savetime=request.getParameter("saveTime");??
  • ???????????if(LoginService.login(username,?password)){??
  • ???????????????if(null!=savetime&&!savetime.isEmpty()){??
  • ???????????????????int?saveTime=Integer.parseInt(savetime);//這里接受的表單值為天來計算的??
  • ???????????????????int?seconds=saveTime*24*60*60;??
  • ???????????????????Cookie?cookie?=?new?Cookie("user",?username+"=="+password);??
  • ???????????????????cookie.setMaxAge(seconds);?????????????????????
  • ???????????????????response.addCookie(cookie);??
  • ???????????????}??
  • ???????????????request.setAttribute("username",username);??
  • ???????????????request.getRequestDispatcher("/main.jsp").forward(request,response);??
  • ???????????}else{??
  • ???????????????request.getRequestDispatcher("/index.jsp").forward(request,response);??
  • ???????????}??
  • ????}??
  • ??
  • }??
  • </span>??
  • ?

    看清上面處理Cookie的方式步驟:其實這是為第一次登錄該網站時【前提是選擇了保存自動登錄期限時間】處理Cookie,只要這一步處理成功,以后都無需經過這個Servlet因為我們接下來要在請求到達前,從Cookie中取出我們的用戶名和密碼,這樣的話就需要一個過濾器了

    Java代碼??
  • <span?style="font-size:?medium;">package?com.login.servlet;??
  • ??
  • import?java.io.IOException;??
  • ??
  • import?javax.servlet.Filter;??
  • import?javax.servlet.FilterChain;??
  • import?javax.servlet.FilterConfig;??
  • import?javax.servlet.ServletException;??
  • import?javax.servlet.ServletRequest;??
  • import?javax.servlet.ServletResponse;??
  • import?javax.servlet.http.Cookie;??
  • import?javax.servlet.http.HttpServletRequest;??
  • import?javax.servlet.http.HttpServletResponse;??
  • ??
  • public?class?IndexFilter?implements?Filter?{??
  • ??
  • ????public?void?destroy()?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ??
  • ????}??
  • ??
  • ????public?void?doFilter(ServletRequest?arg0,?ServletResponse?arg1,??
  • ????????????FilterChain?arg2)?throws?IOException,?ServletException?{??
  • ????????HttpServletRequest?request?=?(HttpServletRequest)?arg0;??
  • ????????HttpServletResponse?response?=?(HttpServletResponse)?arg1;??
  • ????????Cookie[]?cookies?=?request.getCookies();??
  • ????????String[]?cooks?=?null;??
  • ????????String?username?=?null;??
  • ????????String?password?=?null;??
  • ????????if?(cookies?!=?null)?{??
  • ????????????for?(Cookie?coo?:?cookies)?{??
  • ????????????????String?aa?=?coo.getValue();??
  • ????????????????cooks?=?aa.split("==");??
  • ????????????????if?(cooks.length?==?2)?{??
  • ????????????????????username?=?cooks[0];??
  • ????????????????????password?=?cooks[1];??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????????if?(LoginService.login(username,?password))?{??
  • ????????????request.getSession().setAttribute("username",username);??
  • ????????????response.sendRedirect("main.jsp");??
  • ????????????//request.getRequestDispatcher("/main.jsp").forward(request,?response);??
  • ????????}else{??
  • ????????????arg2.doFilter(request,response?);??
  • ????????}??
  • ??????
  • ??
  • ????}??
  • ??
  • ????public?void?init(FilterConfig?arg0)?throws?ServletException?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ??
  • ????}??
  • ??
  • }??
  • </span>??
  • ?

    我這里所說的請求到達之前,不是指的某個路徑匹配的servlet而是指的就是在輸入網址到達登錄頁面前就要進行自動登錄的處理,那么web.xml中應該怎么配置呢

    Xml代碼??
  • <span?style="font-size:?medium;"><?xml?version="1.0"?encoding="UTF-8"?>??
  • <web-app?version="2.5"???
  • ????xmlns="http://java.sun.com/xml/ns/javaee"???
  • ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"???
  • ????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee???
  • ????http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">??
  • ??<filter>??
  • ??<filter-name>loginFilter</filter-name>??
  • ??<filter-class>com.login.servlet.IndexFilter</filter-class>??
  • ??</filter>??
  • ??<filter-mapping>??
  • ??<filter-name>loginFilter</filter-name>??
  • ??<url-pattern>/index.jsp</url-pattern>??
  • ??</filter-mapping>??
  • ??<servlet>??
  • ????<servlet-name>LoginServlet</servlet-name>??
  • ????<servlet-class>com.login.servlet.LoginServlet</servlet-class>??
  • ??</servlet>??
  • ??
  • ??<servlet-mapping>??
  • ????<servlet-name>LoginServlet</servlet-name>??
  • ????<url-pattern>/login.do</url-pattern>??
  • ??</servlet-mapping>??
  • ??<welcome-file-list>??
  • ????<welcome-file>login.jsp</welcome-file>??
  • ??</welcome-file-list>??
  • </web-app>??
  • </span>??
  • ?看見了沒有,上面的filter匹配路徑只是針對一個頁面,與通常寫/*匹配所有請求到達之前是不一樣的寫法哦

    ? 主頁面:main.jsp

    Html代碼??
  • <span?style="font-size:?medium;"><%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%>??
  • <html>??
  • ??<head>??
  • ?????<title>My?JSP?'maiin.jsp'?starting?page</title>??
  • ??</head>??
  • ??<body>??
  • ????登錄成功,歡迎${username}的到來??
  • ??</body>??
  • </html>??
  • </span>??
  • ?

    ?輸入地址:http://localhost:8080/WebApp/login.jsp,出現登錄頁面

    ?然后輸入:admin,123456 ,選擇一個保存日期

    ?這樣第一次登錄成功之后,是經由LoginServlet處理了,由于選擇了日期,所以Cookie中保存了用戶信息,所以之后再輸入同樣地址后,不會出現登錄頁面,就不再經過LoginServlet處理【因為LoginServlet處理的是登陸頁面上登錄按鈕請求的】,而直接提前交由IndexFilter處理,直接進入主頁面,明白了么?

    轉載于:https://www.cnblogs.com/start-fxw/articles/4727481.html

    總結

    以上是生活随笔為你收集整理的cookie自动登陆的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。