當前位置:吉日网官网 - 油畫收藏 - jsp如何實現自動登錄功能

jsp如何實現自動登錄功能

1、在登錄頁面中添加壹個復選框,讓用戶選擇是否願意在壹定時間內實現自動登陸,例如兩周。

代碼:

<input type="checkbox" name="autologin">兩周內自動登錄

2、在負責處理登錄過程的Servlet中,判斷用戶是否選擇了該復選框。如果是,則執行這兩個操作:向用戶發送兩個Cookie,以及向數據庫寫入壹條相應的記錄。

代碼:

Cookie ckUsername, ckSessionid;

if (autologin.equals("on")) {

// 如果用戶選擇了“兩周內自動登錄”,則向用戶發送兩個cookie。

// 壹個cookie記錄用戶名,另壹個記錄唯壹的驗證碼,

// 並將此驗證碼寫入數據庫,以備用戶返回時查詢。(防止偽造cookie)

ckUsername = new Cookie("autoLoginUser", user.getUsername()); // user是代表用戶的bean

ckUsername.setMaxAge(60 * 60 * 24 * 14); //設置Cookie有效期為14天

res.addCookie(ckUsername);

sessionid = session.getId(); // 取得當前的session id

ckSessionid = new Cookie("sessionid", sessionid);

ckSessionid.setMaxAge(60 * 60 * 24 * 14);

res.addCookie(ckSessionid);

// 在數據庫中插入相應記錄

userSessionDAO.insertUserSession(user, sessionid);

}

3、實現自動登錄。因為用戶下次訪問的時候,可能直接訪問網站的任何頁面(例如通過收藏夾),而不壹定是首頁或者登錄頁面,所以我們需要用Filter攔截到達該網站的所有請求,並執行自動登錄。

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {

HttpServletRequest request = (HttpServletRequest) req;

HttpSession session = request.getSession(true);

String username;

String sessionid; // 此sessionid是上次用戶登錄時保存於用戶端的識別碼,用於用戶後續訪問的自動登錄。不是本次訪問的session id。

Cookie[] cookies;

CookieManager cm = new CookieManager(); // CookieManager是壹個自定義的類,用於從Cookie數組中查找並返回指定名稱的Cookie值。

boolean isAutoLogin;

// 如果session中沒有user對象,則創建壹個。

User user = (User) session.getAttribute("user");

if (user == null) {

user = new User(); // 此時user中的username屬性為"",表示用戶未登錄。

}

// 如果user對象的username為"",表示用戶未登錄。則執行自動登錄過程。

// 否則不自動登錄。

if (user.getUsername().equals("")) {

// 檢查用戶瀏覽器是否發送了上次登錄的用戶名和sessionid,

// 如果是,則為用戶自動登陸。

cookies = request.getCookies();

username = cm.getCookieValue(cookies, "autoLoginUser");

sessionid = cm.getCookieValue(cookies, "sessionid");

isAutoLogin = userSessionDAO.getAutoLoginState(username, sessionid); // 如果在數據庫中找到了相應記錄,則說明可以自動登錄。

if (isAutoLogin) {

user.setUsername(username);

user.setNickname(DBUtil.getNickName(username));

session.setAttribute("user", user); // 將user bean添加到session中。

}

}

chain.doFilter(req, resp);

}

  • 上一篇:宣德爐的色彩特征
  • 下一篇:張安君人物介紹
  • copyright 2024吉日网官网