JavaWeb實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)登錄功能
本文實(shí)例為大家分享了JavaWeb實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)登錄功能的具體代碼,供大家參考,具體內(nèi)容如下
用最近所學(xué)的知識(shí)點(diǎn)實(shí)現(xiàn)自動(dòng)登錄,主要有:
1、Filter過(guò)濾器
2、session & cookie
一、需求分析


二、準(zhǔn)備工作
1. 項(xiàng)目目錄

2. 導(dǎo)入相應(yīng)的jar包

三、代碼實(shí)現(xiàn)
1. 搭建環(huán)境
1.1 搭建數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)表
數(shù)據(jù)庫(kù)【user】,數(shù)據(jù)庫(kù)表【t_user】

1.2 搭建頁(yè)面
登錄頁(yè)面【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>
首頁(yè)【index.jsp】
注意:導(dǎo)入<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<body>
這是首頁(yè),
<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)入首頁(yè)
request.getSession().setAttribute("userBean", userBean);
response.sendRedirect("index.jsp");
}else {
//不成功
request.getRequestDispatcher("login.jsp").forward(request, response);
}
} catch (SQLException e) {
e.printStackTrace();
}
3. 過(guò)濾器filter代碼【AutoLoginFilter.java】
實(shí)現(xiàn)思路:
1、先判斷session是否有效,如果有效,就不用取cookie了,直接放行;
2、如果session失效了,那么就取cookie。
a. 取出cookie的值,然后完成登錄;
b. 把這個(gè)用戶(hù)的值存儲(chǔ)到session中;
c. 放行。
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try {
HttpServletRequest request = (HttpServletRequest) req;
//先判斷,session中還有沒(méi)有userBean
UserBean userBean = (UserBean) request.getSession().getAttribute("userBean");
//有---session有效
if(userBean != null) {
chain.doFilter(request, response);
}else {//session失效了----看cookie
//1.來(lái)請(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值存到域中,方便下一次未過(guò)期前還可以用
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類(lèi)
【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í)行登錄,并且返回該用戶(hù)所有的信息
* @param user 執(zhí)行登錄的用戶(hù)信息
* @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());
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaWeb實(shí)現(xiàn)用戶(hù)登錄注冊(cè)功能實(shí)例代碼(基于Servlet+JSP+JavaBean模式)
- JavaWeb簡(jiǎn)單用戶(hù)登錄注冊(cè)實(shí)例代碼(有驗(yàn)證碼)
- javaweb登錄驗(yàn)證碼的實(shí)現(xiàn)方法
- javaWeb使用驗(yàn)證碼實(shí)現(xiàn)簡(jiǎn)單登錄
- javaweb項(xiàng)目如何實(shí)現(xiàn)手機(jī)短信登錄
- JavaWeb實(shí)現(xiàn)用戶(hù)登錄與注冊(cè)功能(服務(wù)器)
- JavaWeb實(shí)現(xiàn)用戶(hù)登錄與注冊(cè)功能
- JavaWeb實(shí)現(xiàn)自動(dòng)登錄功能
- JavaWeb使用mvc模式實(shí)現(xiàn)登錄功能
相關(guān)文章
Springboot maven plugin插件原理及作用
這篇文章主要介紹了Springboot maven plugin插件原理及作用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
基于Java創(chuàng)建XML(無(wú)中文亂碼)過(guò)程解析
這篇文章主要介紹了基于Java創(chuàng)建XML(無(wú)中文亂碼)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
程序包org.springframework.boot不存在的問(wèn)題解決
本文主要介紹了程序包org.springframework.boot不存在的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09
基于JPA查詢(xún)部分字段的相關(guān)事項(xiàng)
這篇文章主要介紹了JPA查詢(xún)部分字段的相關(guān)事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Java編程實(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中為什么重寫(xiě)equals后需要重寫(xiě)hashCode
今天帶各位學(xué)習(xí)一下java中為什么重寫(xiě)equals后需要重寫(xiě)hashCode,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
JDBC數(shù)據(jù)源連接池配置及應(yīng)用
這篇文章主要介紹JDBC建立數(shù)據(jù)庫(kù)連接的兩種方式,使用配置數(shù)據(jù)源的方式連接數(shù)據(jù)庫(kù),效率更高,推薦使用,希望能給大家做一個(gè)參考。2016-06-06
java通過(guò)url讀取遠(yuǎn)程數(shù)據(jù)并保持到本地的實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了java通過(guò)url讀取遠(yuǎn)程數(shù)據(jù)并保持到本地的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求
本文主要介紹了JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
關(guān)于maven全局配置文件settings.xml解析
這篇文章主要介紹了關(guān)于maven全局配置文件settings.xml,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-03-03

