jsp实现用户自动登录功能

yizhihongxing

实现用户自动登录功能通常需要使用到Cookies技术,下面是jsp实现用户自动登录功能的完整攻略:

步骤一:创建登录页面和处理登录请求的代码

首先,我们需要创建一个登录页面,用户输入用户名和密码后提交表单。表单中的action属性需要指向一个jsp页面:

<form name="loginForm" method="post" action="login.jsp">
    <p>
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username"/>
    </p>
    <p>
        <label for="password">密 码:</label>
        <input type="password" id="password" name="password"/>
    </p>
    <p>
        <input type="checkbox" id="remember" name="remember"/>
        <label for="remember">记住我</label>
    </p>
    <p>
        <input type="submit" value="登录"/>
    </p>
</form>

然后,我们需要创建login.jsp页面来处理登录请求,在login.jsp中,可以根据用户名和密码查询数据库判断用户是否输入正确并拥有相应的访问权限。如果用户选择了“记住我”选项,则需要在服务器端生成并发送一个Cookies给客户端,并将其登录信息保存在session中:

<%@page import="java.sql.*"%>
<%
   String username=request.getParameter("username"); //获取表单参数
   String password=request.getParameter("password");

   Class.forName("com.mysql.jdbc.Driver");
   Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password");
   PreparedStatement ps=con.prepareStatement("select * from users where username=? and password=?");
   ps.setString(1,username);
   ps.setString(2,password);
   ResultSet rs=ps.executeQuery();

   if(rs.next()){ //如果查询到匹配的用户
        session.setAttribute("username",username); //将用户名保存到session中
        if(request.getParameter("remember")!=null){ //如果用户选择了“记住我”选项
            Cookie cookie=new Cookie("username",username); //创建一个Cookies
            cookie.setMaxAge(7*24*60*60); //设置Cookies的有效期为7天
            response.addCookie(cookie); //将Cookies发送给客户端
        }
        response.sendRedirect("welcome.jsp"); //重定向到欢迎页面
   }else{ //如果输入错误
        out.println("用户名或密码错误");
   }

   rs.close();
   ps.close();
   con.close();
%>

步骤二:创建检查自动登录的代码

在每次用户访问需要授权的页面时,我们需要检查其是否已经自动登录。如果已经自动登录,服务器会从Cookies中取出用户名并自动给用户登录。检查自动登录的过程通常会放在一个全局过滤器中。

<%@page import="java.io.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%@page import="java.util.*"%>
<%
   String username=null;
   Cookie[] cookies=request.getCookies();
   if(cookies!=null){
      for(int i=0;i<cookies.length;i++){
        Cookie cookie=cookies[i];
        if("username".equals(cookie.getName())){
            username=cookie.getValue(); //从Cookies中取出用户名
            break;
        }
      }
   }

   if(username!=null){ //如果找到了用户名
        session.setAttribute("username",username); //将用户名保存到session中
   }

   chain.doFilter(request, response); //继续执行下一个过滤器或Servlet
%>

在上述代码中,我们使用了doFilter方法,这个方法表示让请求继续执行下一个过滤器或Servlet。在检查自动登录的过程中,我们只是检查了Cookies中是否包含了username的Cookies,如果包含了就将其取出并赋值给session,而不像处理登录请求那样需要查询数据库和验证输入的密码是否正确。

以上便是jsp实现用户自动登录功能的完整攻略,接下来我们同样需要结合示例讲解这个过程:

示例1:自动登录功能示例

下面是一个实现自动登录功能的完整示例。这个示例展示了如何在用户登录成功后,通过Cookies和session自动登录用户,以及如何检查是否存在自动登录信息。

首先是login.jsp页面代码:

<form name="loginForm" method="post" action="login.jsp">
    <p>
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username"/>
    </p>
    <p>
        <label for="password">密 码:</label>
        <input type="password" id="password" name="password"/>
    </p>
    <p>
        <input type="checkbox" id="remember" name="remember"/>
        <label for="remember">记住我</label>
    </p>
    <p>
        <input type="submit" value="登录"/>
    </p>
</form>

然后是login.jsp页面的代码:

<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%@page import="java.sql.*"%>
<%
   // 获取用户名和密码
   String username = request.getParameter("username");
   String password = request.getParameter("password");

   // 查询数据库查看用户名和密码是否匹配
   Class.forName("com.mysql.jdbc.Driver");
   Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password");
   PreparedStatement ps=con.prepareStatement("select * from users where username=? and password=?");
   ps.setString(1,username);
   ps.setString(2,password);
   ResultSet rs=ps.executeQuery();

   if (rs.next()) { // 如果用户名和密码匹配
       session.setAttribute("username", username); // 将用户名保存到session中
       if(request.getParameter("remember")!=null){ // 如果勾选了“记住我”,则生成并发送Cookies
           Cookie cookie=new Cookie("username",username); //创建一个Cookies
           cookie.setMaxAge(7*24*60*60); // 设置有效期为7天
           response.addCookie(cookie); // 发送Cookies给客户端
       }
       response.sendRedirect("index.jsp"); // 重定向到主页
   } else { // 如果用户名和密码不匹配
       out.println("用户名或密码不正确!");
   }
   rs.close();
   ps.close();
   con.close();
%>

最后是全局过滤器filter.jsp的代码:

<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%
   String username=null;
   Cookie[] cookies=request.getCookies(); // 获取所有Cookies
   if(cookies!=null){
      for(int i=0;i<cookies.length;i++){ // 循环查找名为username的Cookies
        Cookie cookie=cookies[i];
        if("username".equals(cookie.getName())){
            username=cookie.getValue(); // 将username赋值给一个变量
            break;
        }
      }
   }

   if(username!=null){  // 如果找到了username的Cookies
        session.setAttribute("username",username); // 将username写入session中
   }

   chain.doFilter(request, response);  // 继续执行下一个Servlet或过滤器
%>

这个示例演示了如何使用Cookies和session来实现自动登录功能,以及如何检查是否存在自动登录信息。在登录页面中,用户输入了用户名和密码并勾选了“记住我”后,登录后台会在session中保存用户名,并通过创建一个有效期为7天的Cookies将用户名发送给客户端,下一次用户打开浏览器时,浏览器会自动通过Cookies发送用户名给服务器,并且通过全局过滤器filter.jsp就可以自动登录,而不需要再次输入用户名和密码。

示例2:清除自动登录信息示例

下面是一个示例,演示如何删除保存在Cookies中的自动登录信息。

首先是一个删除自动登录信息的link,当用户点击这个link时将清除Cookies中保存的自动登录信息:

<a href="remove.jsp">删除自动登录信息</a>

然后是remove.jsp页面的代码:

<%@page import="java.util.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%
    // 获取所有Cookies
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        for (int i = 0; i < cookies.length; i++) {
            Cookie cookie = cookies[i];
            if ("username".equals(cookie.getName())) { // 如果找到了username的Cookies
                cookie.setMaxAge(0); // 清除Cookies
                response.addCookie(cookie);
            }
        }
    }

    response.sendRedirect("login.jsp"); // 重定向到登录页面
%>

这个示例演示了如何删除Cookies中保存的自动登录信息,当用户点击删除自动登录信息的link时,服务器会查找Cookies中的username信息并将其清除。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp实现用户自动登录功能 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 详解servlet的url-pattern匹配规则

    让我们详细讲解 Servlet 的 url-pattern 匹配规则。 在 Servlet 中,url-pattern 是用于匹配用户请求的一个关键属性。url-pattern 可以通过 web.xml 文件或者使用注解的方式进行配置。 下面是 url-pattern 的匹配规则及示例说明: 1. 精确匹配 通过 /path 的方式设置的 url-patte…

    Java 2023年6月15日
    00
  • window系统安装jdk jre的教程图解

    下面是“Window系统安装JDK/JRE的教程图解”的完整攻略: 安装JDK/JRE 1. 下载JDK/JRE 首先,前往Oracle官网的JDK下载页面:https://www.oracle.com/java/technologies/javase-downloads.html 根据需要下载对应版本的JDK/JRE安装包,选择相应的操作系统,比如Wind…

    Java 2023年5月24日
    00
  • SpringMVC整合SSM实现异常处理器详解

    SpringMVC整合SSM实现异常处理器详解 在 Web 应用程序开发中,异常处理是一个非常重要的问题。如果我们不处理异常,那么当应用程序出现异常时,用户将会看到一个不友好的错误页面,这会影响用户体验。因此,我们需要在应用程序中实现异常处理器,以便更好地管理和维护应用程序。本文将详细讲解 SpringMVC 整合 SSM 实现异常处理器的完整攻略,包括异常…

    Java 2023年5月18日
    00
  • Java经典排序算法之插入排序

    Java经典排序算法之插入排序 插入排序算法简介 插入排序是一种简单直观的排序算法,它的基本思想是将待排序序列分为已排序和未排序两部分,初始时将第一个元素视为已排序序列,将其他元素视为未排序序列。然后依次将未排序序列中的元素插入到已排序序列中的正确位置。在插入元素时,需要从右到左比较已排序序列中的元素,找到插入元素的正确位置。 插入排序算法示例 假设我们要对…

    Java 2023年5月19日
    00
  • 详解mybatis.generator配上最新的mysql 8.0.11的一些坑

    下面我将详细讲解如何配合最新的MySQL 8.0.11使用MyBatis Generator,并解决可能会遇到的一些坑。具体步骤如下: 1. 准备工作 在开始之前,我们需要准备一些必要的工具和环境: MySQL 8.0.11及以上版本,这里以MySQL 8.0.26为例。 JDK 8及以上版本。 MyBatis Generator,这里以版本1.4.0为例。…

    Java 2023年5月20日
    00
  • java — 标记接口

    标记接口 标记接口(Marker Interface),又称标签接口(Tag Interface) 仅代表一个标记 不包含任何方法标记接口是用来判断某个类是否具有某种能力 Cloneable标记接口 此类实现了 Cloneable 接口,以指示 Object.clone 方法可以合法地对该类实例进行按字段复制如果在没有实现 Cloneable 接口的实例上调…

    Java 2023年4月17日
    00
  • PostgreSql JDBC事务操作方法详解

    PostgreSql JDBC事务操作方法详解 在Java应用程序中,使用JDBC访问PostgreSQL数据库时,我们经常需要使用事务来保证数据的一致性和可靠性。本文将详细介绍使用PostgreSQL JDBC驱动程序执行事务的方法。 驱动程序获取 我们需要先通过以下方式获取PostgreSQL JDBC驱动程序,然后将其放在Java应用程序中: Mave…

    Java 2023年6月16日
    00
  • Java整合mybatis实现过滤数据

    接下来我将详细讲解“Java整合MyBatis实现过滤数据”的完整攻略,包括以下几个步骤: 配置MyBatis 首先需要在项目中配置MyBatis,具体可以参考该教程:MyBatis官方文档。在配置好MyBatis后,就可以进行下一步。 创建Mapper接口 在使用MyBatis的过程中,很多开发者喜欢使用Mapper接口进行数据库操作,所以我们需要创建一个…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部