生活随笔
收集整理的這篇文章主要介紹了
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()?{????????????????}????????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");??????????????????????}else{??????????????arg2.doFilter(request,response?);??????????}??????????????}????????public?void?init(FilterConfig?arg0)?throws?ServletException?{????????????????}????}??</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自动登陆的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。