1. 程式人生 > >JavaWeb 過濾器實現30天內自動登入

JavaWeb 過濾器實現30天內自動登入

1、在 index.jsp 中

		  <body>
			<h1>30天內自動登陸</h1><hr>
			<c:if test="${sessionScope.user == null}">
				遊客!
				<a href="${pageContext.request.contextPath }/login.jsp">登入</a>
			</c:if>
			<c:if test="${sessionScope.user != null}">
				歡迎回來,${sessionScope.user.name }
				<a href="${pageContext.request.contextPath }/servlet/LogoutServlet">登出</a>
			</c:if>
		  </body>
2、在 login.jsp 中
		<body>
			<h1>使用者登入</h1><hr>
			<form action="${pageContext.request.contextPath }/servlet/LoginServlet" method="POST">
				使用者名稱<input type="text" name="name" />
				密碼<input type="password" name="password" />
				<input type="checkbox" name="autologin" value="true"/>30天內自動登陸
				<input type="submit" value="登入"/> 
			</form>
		  </body>
3、建立 LoginServlet
			public class LoginServlet extends HttpServlet {

				public void doGet(HttpServletRequest request, HttpServletResponse response)
						throws ServletException, IOException {
					//1.獲取使用者名稱密碼
						String name = request.getParameter("name");
						String password  = MD5Utils.md5(request.getParameter("password"));
					//2.校驗使用者名稱密碼
						String sql = "select * from user where name = ? and password = ? ";
						User user = null;
						try {
							QueryRunner runner = new QueryRunner(DaoUtils.getSource());
							user = runner.query(sql, new BeanHandler<User>(User.class),name,password);
						} catch (SQLException e) {
							e.printStackTrace();
						}
						if(user == null){
							response.getWriter().write("使用者名稱密碼不正確");
							return;
						}else{
						//3.登入使用者
							request.getSession().setAttribute("user", user);
						
							//如果使用者勾選過30天內自動登陸,傳送自動登陸cookie
							if("true".equals(request.getParameter("autologin"))){
								Cookie autologinC = new Cookie("autologin",user.getName()+":"+user.getPassword());
								autologinC.setPath(request.getContextPath());
								autologinC.setMaxAge(3600*24*30);
								response.addCookie(autologinC);
							}
							
							
						//4.重定向到主頁
							response.sendRedirect(request.getContextPath()+"/index.jsp");
					}
				}
			}

4、建立 AutoLoginFilter
			public class AutologinFilter implements Filter {
				public void doFilter(ServletRequest request, ServletResponse response,
						FilterChain chain) throws IOException, ServletException {
					HttpServletRequest req = (HttpServletRequest) request;
					HttpServletResponse resp = (HttpServletResponse) response;

					//1.只有未登入的使用者才能自動登陸
					if(req.getSession(false)==null || req.getSession().getAttribute("user")==null){
						
						//2.只有帶了自動登陸cookie的使用者才能自動登陸
						Cookie [] cs = req.getCookies();
						Cookie findC = null;
						if(cs!=null){
							for(Cookie c : cs){
								if("autologin".equals(c.getName())){
									findC = c;
									break;
								}
							}
						}
						
						if(findC!=null){
							//3.自動登入Cookie中儲存的使用者名稱密碼都需要是正確的才能自動登陸
							String name = findC.getValue().split(":")[0];
							String password= findC.getValue().split(":")[1];
							String sql = "select * from user where name = ? and password = ? ";
							User user = null;
							try {
								QueryRunner runner = new QueryRunner(DaoUtils.getSource());
								user = runner.query(sql, new BeanHandler<User>(User.class),name,password);
							} catch (SQLException e) {
								e.printStackTrace();
							}
							
							if(user!=null){
								req.getSession().setAttribute("user", user);
							}
						}
					}
					//無論是否自動登陸,都放行資源
					chain.doFilter(request, response);
				}
		}
5、註冊過濾器
註冊
			<filter>
				<description>自動登陸過濾器</description>
				<filter-name>AutologinFilter</filter-name>
				<filter-class>com.itheima.filter.AutologinFilter</filter-class>
			</filter>
			<filter-mapping>
				<filter-name>AutologinFilter</filter-name>
				<url-pattern>/*</url-pattern>
			</filter-mapping>	
6、登出功能
		public class LogoutServlet extends HttpServlet {
			public void doGet(HttpServletRequest request, HttpServletResponse response)
					throws ServletException, IOException {
				if(request.getSession(false)!=null){
					request.getSession().invalidate();

					//刪除自動登入 cookie
					Cookie autologinC = new Cookie("autologin", "");
					autologinC.setPath(request.getContextPath());
					autologinC.setMaxAge(0);
					response.addCookie(autologinC);
				}
				response.sendRedirect(request.getContextPath()+"/index.jsp");
			}
		}




相關推薦

JavaWeb 過濾器實現30自動登入

1、在 index.jsp 中 <body> <h1>30天內自動登陸</h1><hr> <c:if test="${ses

使用cookie實現一週自動登入

一般網站的登入介面都會有自動登入的一個選項。現在就來實現一個一週內自動登入的功能。 1、如果當用戶登入的時候,在處理頁,要判斷是否選擇了自動登入,然後實現將id和name存進cookie: if($autologin){ setcookie("userid", $use

Spring Security框架下實現兩週自動登入"記住我"功能

本文是Spring Security系列中的一篇。在上一篇文章中,我們通過實現UserDetailsService和UserDetails介面,實現了動態的從資料庫載入使用者、角色、許可權相關資訊,從而實現了登入及授權相關的功能。這一節就在此基礎上新增,登入過程中經常使用的“記住我”功能,也就是我們經常會

30進行python入門!

    小卷我是個外行,但是對程式設計很有興趣。     小時候一直都在想象著自己可以開發一款軟體或者一款遊戲,但是由於太懶一直沒有去學習。     現在我想重拾以前的夢想,寫下日誌記錄自己學習的點點滴滴,也希望群眾一起監督(雖然並沒有人會管我哈

vue問題記錄(二):cookie實現免登陸,以及記住使用者名稱密碼等

首先,我們是要在自己的專案目錄下面建立一個資料夾,如下圖 ,然後就在我標記的地方,寫關於cookie的方法,獲取cookie,設定,清除等,如下圖 程式碼如下,方便拷貝 //獲取cookie、 export functio

使用SharedPreferences實現記住密碼和自動登入

今天,來為大家分享一下通過SharedPreferences來實現QQ自動登入與記住密碼: SharedPreferences是一種輕型的資料儲存方式,它的本質是基於XML檔案儲存key-value鍵值對資料,通常用來儲存一些簡單的配置資訊。其儲存位置在/da

實現一週之內自動登入的 cookie和session還有localStorage的儲存機制

這三個應該是最讓程式設計師頭疼的了,我利用簡單的登入介面的username和password來說明一下吧. 1.cookie用來儲存使用者相關資料,儲存的位置在使用者本地: 首先是登入介面定義: <form action="server.php" method="po

密碼錯誤3次,30分鐘無法登入原始碼

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;

cookie、session及實現記住密碼,自動登入

在登入帳號、密碼框下,有三種帳號登入模式可供選擇,使用者可根據自己的具體情況選擇其中一種適合自己的模式。 1、網咖模式:勾選網咖模式後,登入的帳號會在歪歪登出/退出的時候自動清除,不會留在登入框中,可以保護自己的帳號不對外洩露,建議在外地上網時使用,比方網咖或者其他

php中實現記住密碼下次自動登入的例子

做網站的時候經常會碰到要實現記住密碼,下次自動登入,一週內免登陸,一個月內免登陸這種需求。這種功能一般都是通過cookie來實現的。本篇文章將簡單說一下如何使用php實現該需求的。當然實現該需求的方法有N多種。 整個過程就是使用者在登陸的時候,如果選擇了記住密碼或者一週內免

JavaWeb丨通過過濾器實現登入攔截及處理中文亂碼問題

“登入過濾器”就是為了防止在使用者沒有登入的情況下來訪問我們的網站。 過濾器的生命週期一般都要經過下面三個階段: 1.初始化 當容器第一次載入該過濾器時,init() 方法將被呼叫。該類在這個方法中包含了一個指向 Filter Config 物件的引用。 2.過濾 過濾器的大多數時間都消

JavaWeb 使用Filter實現使用者自動登入(教材學習筆記)

1.編寫User類 package cn.itcast.chapter08.entity; public class User { private String username; private String password; public String getUsername()

Filter過濾器實現自動登入

Filter介紹問題:Filter是什麼,它能做什麼?    1.從兩個方面來解析Filter是什麼?       1.功能  可以幫助我們對請求與響應操作進行過濾。       2.技術  Sun公司定義的一個介面,javax.servlet.Filter   2.Fil

記一次用python selenium 通過chrome+chromedriver 實現公司網上網自動登入認證、上班自動登入打卡python指令碼筆記

背景 寫這個指令碼純屬是覺得好玩而已,一開始以為很簡單,看了大部分網上的程式碼確實很簡單就那麼幾行,自己也就想試試,後來發現由於這個還涉及了一些html的知識點發現還是沒那麼簡單的,從一開始獲取登入按鈕的input id到後面打卡按鈕無法使用發現還使用了ifr

好記性不如爛筆頭34-利用java過濾器實現使用者自動登入

在很多的網站中,都有自動登入的功能,實現自動登入的方法有很多種方式,利用JAVA過濾器也能夠實現使用者的自動登入。 1、 實現使用者自動登入的基本原理 在使用者登陸成功後,傳送一個cookie給客戶端,cookie的值為使用者名稱和md5加密後的密碼。

登入安全性 一連續輸入密碼錯誤3次,第二天才能登入(過了當天凌晨24點),實現原理

登入安全性 一天內連續輸入密碼錯誤3次,第二天才能登入(過了當天凌晨24點)  下面我們先在資料庫中建立一個試驗表,id,使用者名稱username,密碼pwd,次數num,時間time(date)

利用過濾器(Filter)實現自動登入功能

        思路:登入成功儲存登入時Cookie以及Session,下次開啟網站通過過濾器攔截檢視Session是否存在使用者(考慮使用者沒有關閉瀏覽器的情況),如果Session中有使用者資料,放行,從Cookie中查詢使用者資料如果沒有資料,放行。         具

Filter過濾器+cookie實現自動登入和安全登入

實現思想: 我們只要登陸成功就把登入資訊儲存到cookie中,將使用者名稱存入session中,下一次進入介面只要通過AutoLoginfilter攔截獲取cookie,如果有登入資訊的cookie就取出來,進行自動登入處理,每一次訪問通過secureLo

SQL語句來查詢今天、昨天、730的數據,經典!

diff 指定 first 內容 輸出 har edi time nth ---恢復內容開始--- 今天的所有數據:select * from 表名 where DateDiff(dd,datetime類型字段,getdate())=0 昨天的所有數據:select *

自動登陸已失敗多次,30分鐘請手動登陸

cnblogs post 衛士 失敗 spa 恢復 跳板 class 報錯 遠程登陸跳板機時,該電腦未加入域,遇到報錯:自動登陸已失敗多次,30分鐘內請手動登陸 本地登陸正常。 解決辦法:卸載跳板機上的360安全衛士,恢復正常。 自動登陸已失敗多次,30分鐘內請手動登陸