JavaWeb實(shí)現(xiàn)簡單的自動(dòng)登錄功能
本文實(shí)例為大家分享了JavaWeb實(shí)現(xiàn)簡單的自動(dòng)登錄功能的具體代碼,供大家參考,具體內(nèi)容如下
用最近所學(xué)的知識(shí)點(diǎn)實(shí)現(xiàn)自動(dòng)登錄,主要有:
1、Filter過濾器
2、session & cookie
一、需求分析
二、準(zhǔn)備工作
1. 項(xiàng)目目錄
2. 導(dǎo)入相應(yīng)的jar包
三、代碼實(shí)現(xiàn)
1. 搭建環(huán)境
1.1 搭建數(shù)據(jù)庫、數(shù)據(jù)庫表
數(shù)據(jù)庫【user】,數(shù)據(jù)庫表【t_user】
1.2 搭建頁面
登錄頁面【login.jsp】
<body> <form action="LoginServlet" method="post"> 賬號(hào):<input type="text" name="username"><br> 密碼:<input type="password" name="password"><br> <input type="checkbox" name="auto_login">自動(dòng)登錄<br> <input type="submit" value="登錄"> </form> </body>
首頁【index.jsp】
注意:導(dǎo)入<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<body> 這是首頁, <c:if test="${not empty userBean }"> 歡迎你,${userBean.username } </c:if> <c:if test="${empty userBean }"> 你好,請(qǐng)登錄! </c:if> </body>
2. 登錄servlet代碼【LoginServlet.java】
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { String userName = request.getParameter("username"); String password = request.getParameter("password"); String autoLogin = request.getParameter("auto_login"); UserBean user = new UserBean(); user.setUsername(userName); user.setPassword(password); UserDao dao = new UserDaoImpl(); UserBean userBean = dao.login(user); if(userBean != null) { //成功了,進(jìn)入首頁 request.getSession().setAttribute("userBean", userBean); response.sendRedirect("index.jsp"); }else { //不成功 request.getRequestDispatcher("login.jsp").forward(request, response); } } catch (SQLException e) { e.printStackTrace(); }
3. 過濾器filter代碼【AutoLoginFilter.java】
實(shí)現(xiàn)思路:
1、先判斷session是否有效,如果有效,就不用取cookie了,直接放行;
2、如果session失效了,那么就取cookie。
a. 取出cookie的值,然后完成登錄;
b. 把這個(gè)用戶的值存儲(chǔ)到session中;
c. 放行。
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { HttpServletRequest request = (HttpServletRequest) req; //先判斷,session中還有沒有userBean UserBean userBean = (UserBean) request.getSession().getAttribute("userBean"); //有---session有效 if(userBean != null) { chain.doFilter(request, response); }else {//session失效了----看cookie //1.來請(qǐng)求的時(shí)候,先從請(qǐng)求里面取出cookie,但是cookie里有很多的key-value Cookie[] cookies = request.getCookies(); //2.從一堆的cookie里面找出以前給瀏覽器發(fā)的那個(gè)cookie Cookie cookie = CookieUtil.findCookie(cookies, "auto_login"); //第一次登錄 if(cookie == null) { chain.doFilter(request, response); }else {//不是第一次登錄 String value = cookie.getValue(); String username = value.split("#")[0]; String password = value.split("#")[1]; //完成登錄 UserBean user = new UserBean(); user.setUsername(username); user.setPassword(password); UserDao dao = new UserDaoImpl(); userBean = dao.login(user); //將session值存到域中,方便下一次未過期前還可以用 request.getSession().setAttribute("userBean", userBean); chain.doFilter(request, response); } } } catch (Exception e) { e.printStackTrace(); chain.doFilter(req, response); } }
4. 其他代碼
4.1 方法findCookie()
作用:從一堆的cookie里面找出以前給瀏覽器發(fā)的那個(gè)cookie
【CookieUtil.java】
public class CookieUtil { public static Cookie findCookie(Cookie[] cookies,String name) { if(cookies != null) { for(Cookie cookie: cookies) { if(name.equals(cookie.getName())) { return cookie; } } } return null; } }
4.2 Bean類
【UserBean.java】
public class UserBean { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
4.3 UserDao & UserDaoImpl
UserDao.java
public interface UserDao { /** * 執(zhí)行登錄,并且返回該用戶所有的信息 * @param user 執(zhí)行登錄的用戶信息 * @return */ UserBean login(UserBean user) throws SQLException; }
UserDaoImpl.java
public class UserDaoImpl implements UserDao { @Override public UserBean login(UserBean user) throws SQLException { QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource()); String sql = "select * from t_user where username = ? and password = ?"; return runner.query(sql, new BeanHandler<UserBean>(UserBean.class),user.getUsername(),user.getPassword()); } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaWeb實(shí)現(xiàn)用戶登錄注冊(cè)功能實(shí)例代碼(基于Servlet+JSP+JavaBean模式)
- JavaWeb簡單用戶登錄注冊(cè)實(shí)例代碼(有驗(yàn)證碼)
- javaweb登錄驗(yàn)證碼的實(shí)現(xiàn)方法
- javaWeb使用驗(yàn)證碼實(shí)現(xiàn)簡單登錄
- javaweb項(xiàng)目如何實(shí)現(xiàn)手機(jī)短信登錄
- JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能(服務(wù)器)
- JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能
- JavaWeb實(shí)現(xiàn)自動(dòng)登錄功能
- JavaWeb使用mvc模式實(shí)現(xiàn)登錄功能
相關(guān)文章
Springboot maven plugin插件原理及作用
這篇文章主要介紹了Springboot maven plugin插件原理及作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10基于Java創(chuàng)建XML(無中文亂碼)過程解析
這篇文章主要介紹了基于Java創(chuàng)建XML(無中文亂碼)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10程序包org.springframework.boot不存在的問題解決
本文主要介紹了程序包org.springframework.boot不存在的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09Java編程實(shí)現(xiàn)生成給定范圍內(nèi)不重復(fù)隨機(jī)數(shù)的方法小結(jié)
這篇文章主要介紹了Java編程實(shí)現(xiàn)生成給定范圍內(nèi)不重復(fù)隨機(jī)數(shù)的方法,結(jié)合實(shí)例形式總結(jié)分析了java基于數(shù)學(xué)運(yùn)算與判斷實(shí)現(xiàn)不重復(fù)隨機(jī)數(shù)的生成功能,需要的朋友可以參考下2017-07-07淺談java中為什么重寫equals后需要重寫hashCode
今天帶各位學(xué)習(xí)一下java中為什么重寫equals后需要重寫hashCode,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05JDBC數(shù)據(jù)源連接池配置及應(yīng)用
這篇文章主要介紹JDBC建立數(shù)據(jù)庫連接的兩種方式,使用配置數(shù)據(jù)源的方式連接數(shù)據(jù)庫,效率更高,推薦使用,希望能給大家做一個(gè)參考。2016-06-06java通過url讀取遠(yuǎn)程數(shù)據(jù)并保持到本地的實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了java通過url讀取遠(yuǎn)程數(shù)據(jù)并保持到本地的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求
本文主要介紹了JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06關(guān)于maven全局配置文件settings.xml解析
這篇文章主要介紹了關(guān)于maven全局配置文件settings.xml,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-03-03