本文实例为大家分享了javaweb实现简单的自动登录功能的具体代码,供大家参考,具体内容如下

用最近所学的知识点实现自动登录,主要有:

1、filter过滤器

2、session & cookie

一、需求分析

二、准备工作

1. 项目目录

2. 导入相应的jar包

三、代码实现

1. 搭建环境

1.1 搭建数据库、数据库表

数据库【user】,数据库表【t_user】

1.2 搭建页面

登录页面【login.jsp】

<body>

 <form action="loginservlet" method="post">
  账号:<input type="text" name="username"><br>
  密码:<input type="password" name="password"><br>
  <input type="checkbox" name="auto_login">自动登录<br>
  <input type="submit" value="登录">
 </form>

</body>

首页【index.jsp】
注意:导入<%@ 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 }">
  你好,请登录!
 </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) {
    //成功了,进入首页
    
    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】

实现思路:

1、先判断session是否有效,如果有效,就不用取cookie了,直接放行;
2、如果session失效了,那么就取cookie。

a. 取出cookie的值,然后完成登录;
b. 把这个用户的值存储到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.来请求的时候,先从请求里面取出cookie,但是cookie里有很多的key-value
    cookie[] cookies = request.getcookies();
    //2.从一堆的cookie里面找出以前给浏览器发的那个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里面找出以前给浏览器发的那个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 {
 /**
  * 执行登录,并且返回该用户所有的信息
  * @param user  执行登录的用户信息
  * @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());
  
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。