记录一次写CooKie自动登陆实例遇到的问题(大马虎就是我)

2023-10-29 19:08

本文主要是介绍记录一次写CooKie自动登陆实例遇到的问题(大马虎就是我),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

许多网站都提供用户自动登陆功能,即用户第一次登陆网站,服务器将用户名和密码以Cookie形式发送到客户端。当客户下次再访问该网站时,浏览器自动将Cookie文件中的用户名和密码一起发送到服务器,服务器从Cookie中取出信息,实现自动登陆。

login.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head><title>登录页面</title></head>
<body>
${sessionScope.message}<br>
<form action="CheckUserServlet" method="post">用户名:<input type="text" name="username"/><br>密码:<input type="password" name="password"/><br><input type="checkbox" name = "check" value="check" />自动登陆<br><input type="submit" value="提交" /><input type="reset" value="重置"/></form>
</body>
</html>

注意这里的name=username和password,我是在这里出错,我当时直接套的一个程序的登陆界面,和我之后CheckUserServlet.java中的不符,从而导致空指针异常java.lang.NullPointerException。
在这里插入图片描述

welcome.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<html><title>欢迎页面</title><body>
欢迎您!${sessionScope.message}
</body>
</html>

CheckUserServlet.java

package com.demo;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;@WebServlet("/CheckUserServlet")
public class CheckUserServlet extends javax.servlet.http.HttpServlet {String message = null;public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");String value1 = "",value2="";Cookie cookie = null;Cookie[] cookies = request.getCookies();if (cookies!=null){for(int i = 0;i<cookies.length;i++){cookie = cookies[i];if(cookie.getName().equals("username"))value1 = cookie.getValue();if(cookie.getName().equals("password"))value2 = cookie.getValue();}if(value1.equals("admin")&&value2.equals("admin")){message = "欢迎您!"+value1+"再次登录该页面!";request.getSession().setAttribute("message", message);response.sendRedirect("welcome.jsp");}else{response.sendRedirect("login.jsp");}}else{response.sendRedirect("login.jsp");}}public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{response.setContentType("text/html;charset=utf-8");String username;username = request.getParameter("username").trim();String password;password = request.getParameter("password").trim();if(!username.equals("admin") || !password.equals("admin")){message = "用户名或口令不正确,请重试!";request.getSession().setAttribute("message",message);response.sendRedirect("login.jsp");}else{// 如果用户选中了“自动登录”复选框,向浏览器发送2个Cookieif((request.getParameter("check")!=null) &&(request.getParameter("check").equals("check"))){Cookie nameCookie = new Cookie("username", username);Cookie pswdCookie = new Cookie("password", password);nameCookie.setMaxAge(60*60);pswdCookie.setMaxAge(60*60);response.addCookie(nameCookie);response.addCookie(pswdCookie);}message = "你已成功登录!";request.getSession().setAttribute("message",message);response.sendRedirect("welcome.jsp");}}
}

问题就是在
String username;
username = request.getParameter(“username”).trim();
String password;
password = request.getParameter(“password”).trim();
我这里写的是username,login.jsp中开始写的是userName,复制粘贴害人啊。

以GET方法访问CheckUserServlet,当Servlet将响应重定向到llogin.jsp页面。该页面中如果用户输入了正确的用户名和口令,且选中“自动登陆”选框。

  // 如果用户选中了“自动登录”复选框,向浏览器发送2个Cookieif((request.getParameter("check")!=null) &&(request.getParameter("check").equals("check"))){Cookie nameCookie = new Cookie("username", username);Cookie pswdCookie = new Cookie("password", password);

单击提交,会发送POST请求由doPost()处理。在该方法中使用用户名和口令创建两个Cookie对象并发送到客户端。
之后再发送GET请求,Servlet将从Cookie中检索出用户名和口令,并验证通过后将响应重定向到welcome.jsp页面。
在这里插入图片描述
在这里插入图片描述

后记

复制粘贴的东西一定要仔细检查。

这篇关于记录一次写CooKie自动登陆实例遇到的问题(大马虎就是我)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/302737

相关文章

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

MySQL磁盘空间不足问题解决

《MySQL磁盘空间不足问题解决》本文介绍查看空间使用情况的方式,以及各种空间问题的原因和解决方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录查看空间使用情况Binlog日志文件占用过多表上的索引太多导致空间不足大字段导致空间不足表空间碎片太多导致空间不足临时表空间

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

Java中InputStream重复使用问题的几种解决方案

《Java中InputStream重复使用问题的几种解决方案》在Java开发中,InputStream是用于读取字节流的类,在许多场景下,我们可能需要重复读取InputStream中的数据,这篇文章主... 目录前言1. 使用mark()和reset()方法(适用于支持标记的流)2. 将流内容缓存到字节数组

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

解决Failed to get nested archive for entry BOOT-INF/lib/xxx.jar问题

《解决FailedtogetnestedarchiveforentryBOOT-INF/lib/xxx.jar问题》解决BOOT-INF/lib/xxx.jar替换异常需确保路径正确:解... 目录Failed to get nested archive for entry BOOT-INF/lib/xxx

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导