案例1:
賬号自動登入:
1.思想
使用Filter、cookie、session 步驟:
首先建立基本的登入邏輯,就是連接配接上資料庫可以進行簡單的登入;
項目架構:
com.itheima.daoimp
|--UserDaoimp
com.itheima.domain
|--User
com.itheima.filter
|--AutoLoginFilter
|--Ucodeing 統一編碼處理過濾器
com.itheima.web.servlet
|--UserLoginservlet
com.itheima.utils
|--JdbcUtils
|--MyBeanUtils 核心jar:
mysql-connector-java-5.1.22-bin.jar //mysql連接配接jar
mchange-commons-java-0.2.3.jar //依賴包
commons-logging-1.1.1.jar //第三方log包,依賴包---log4j.jar
commons-dbutils-1.4.jar //jdbc封裝工具類
commons-beanutils-1.8.3.jar //bean封裝工具類
c3p0-0.9.2-pre5.jar //c3p0 資料庫依賴包 c3p0-config.xml //資料庫連接配接池配置檔案
(一)簡單的不進行闡述:直接上主要邏輯地方
1.UserLoginservlet中進行登入判斷,如果登入成功則,将從資料庫查詢出來的beanuser
存儲到session中
2.判斷V(視圖層)是否點選了,記住密碼複選框按鈕。如果點選了
将使用者名和密碼進行存儲Cookie持久化處理
cookie.setMaxAge(60*60*24); //一天
cookie.setpath("/")
respond.addCookie(); (二) |建立過濾器 AutoLoginFilter,進行登入的邏輯判斷
1.首先判斷session中是否存在user對象
1.1 User loginUser = (User) req.getSession().getAttribute("Loginuser");
1.2 如過存在(loginUser!=null) 則過濾器進行放行 chain.doFilter(); return;
1.3 判斷cookie中是否有值,(使用者是否點選了記住密碼)
/**
* 判斷cookie中是否有值
*/
String autoLogin = null;
Cookie currentCookie = null;
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie oldLogin : cookies) {
if ("loginUser".equals(oldLogin.getName())) {
// 得到目标cookie
autoLogin = oldLogin.getValue();
// 拿到了之前的cookie
currentCookie = oldLogin;
break;
}
}
} 1.4 如果cookie中沒有存在值 (autoLogin==null) chain.doFilter()----return;
1.5 如果讀取到了值則進行處理,設定登入邏輯 /**
* 如果cookie中有值 進行處理
*/ String username = auto[0];
String password = auto[1]; User user = new User(username, password);
User reuser = new Userservice().find(user); 1.6判斷邏輯,如果的使用者登入過之後。cookie記住了之前的cookie資訊,但是在登入之前user資訊密碼改了
。導緻無法登入,之前的cookie資訊,無效,但是還儲存在記憶體中,持久化。
那麼我們需要進行清理無效的cookie 是以,進行清除。
if (loginUser == null) {
//清楚無用的cookie
currentCookie.setMaxAge(0);
currentCookie.setPath("/");
res.addCookie(currentCookie);
chain.doFilter(request, response); return;
} 1.7
// 登入
req.getSession().setAttribute("Loginuser", reuser);
chain.doFilter(request, response);