【SpringMVC】_SpringMVC实现用户登录

目录

1、需求分析

2、接口定义

2.1 校验接口

       请求参数

       响应数据

2.2 查询登录用户接口

        请求参数

        响应数据

4、服务器代码

5、前端代码

5.1 登录页面login.html

5.2 首页页面index.html

6、运行测试


1、需求分析

        用户输入账号与密码,后端校验密码是否正确:

(小型项目仅作阶段性学习练习,此处不使用数据库连接,使用session保存客户端信息)

        账号与密码不匹配(或称密码不正确):弹窗提示;

        账号与密码匹配(密码正确):跳转至首页显示登录用户信息。

                                                           并在后续再访问中可以获取到登录用户信息;

        对于后端开发人员,不涉及前端页面的展示,只需要提供两个功能:

        (1)登录页面:通过账号与密码校验输入的账号密码是否正确;

        (2)首页:告知前端当前登录用户,如果当前已有用户登录,返回登录人的信息;

                             如果没有,返回空;

2、接口定义

2.1 校验接口

        (1)请求方式:/user/login

        (2)请求方式:GET

        (3)接口描述:校验账号密码是否正确

       请求参数

参数名类型是否必须备注
userNameString校验的账号
passwordString校验的密码

       响应数据

        (1)Content-Type:text/html

        (2)响应内容:

                true:账号密码验证成功;

                false:账号密码验证失败;

2.2 查询登录用户接口

        (1)请求路径:/user/getLoginUser

        (2)请求方式:GET

        (3)接口描述:查询当前登录的用户

        请求参数

        无

        响应数据

        (1)Content-Type:text/html

        (2)响应内容:admin

4、服务器代码

包括   校验接口   与  查询登录用户接口

package com.example.demo.controller;import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("/login")public boolean login(String userName, String password, HttpSession session){// 第一步:校验参数合法性方法// 校验参数合法性方法1:普通判别式
//        if(userName == null || userName.length()==0 || password == null || password.length()==0){
//            return false;
//        }// 校验参数合法性方法2:使用Spring提供的方法if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){return false;}// 第二步:校验账户名与密码if("admin".equals(userName) && "admin".equals(password)){// 第三步:设置sessionsession.setAttribute("username","admin");return true;}return false;}@RequestMapping("/getUserInfo")public String getUserInfo(HttpServletRequest request){// 从session中获取登录用户HttpSession session = request.getSession(false);String userName = null;if(session != null){userName = (String)session.getAttribute("username");}return userName;}
}

5、前端代码

5.1 登录页面login.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>登录页面</title>
</head><body>
<h1>用户登录</h1>
用户名:<input name="userName" type="text" id="userName"><br>
密码:<input name="password" type="password" id="password"><br>
<input type="button" value="登录" onclick="login()"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>function login() {$.ajax({url:"/user/login",type:"post",data:{"userName": $("#userName").val(),"password": $("#password").val()},// 回调函数success:function(result){// result表示后端返回的结果if(result){// 完成页面跳转// 方式1:location.href = "/index.html";// 方式2:// location.assign();}else{alert("用户名与密码不匹配");}}});}</script>
</body></html>

5.2 首页页面index.html

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>用户登录首页</title>
</head><body>
登录人: <span id="loginUser"></span><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>// 需要在页面加载时就要调用后端请求$.ajax({url:"/user/getUserInfo",type:"get",success:function(username){$("#loginUser").text(username);}})
</script>
</body>
</html>

6、运行测试

使用本地回环URL: http://127.0.0.1:8080/login.html

登录页面如下:

输入用户名:admin,密码:admin并点击登录:

点击登录可以实现登录页面跳转至首页,并显示登录人信息;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文速读】Self-Rag框架,《Self-Rag: Self-reflective Retrieval augmented Generation》

关于前面的文章阅读《When to Retrieve: Teaching LLMs to Utilize Information Retrieval Effectively》&#xff0c;有网友问与Self-Rag有什么区别。 所以&#xff0c;大概看了一下Self-Rag这篇论文。 两篇文章的方法确实非常像&#xff0c;Self-Rag相对更加复杂一些。 When …

华为校招机试 - 矿车运输成本(20240522)

题目描述 露天矿采矿作业的特点是规模大,矿石和废料的移动量达到百万吨,运输成本开销较大,需要寻求一种最优的运输路径节省成本。 已知矿场可以划分成 N * M 的网格图,每个网格存在地形的差异,因此通过不同网格时,成本开销存在差异。 网格有以下 5 种类型: 标志为 S …

深度搜索算法(c++)

迷宫出口 一天Extense在森林里探险的时候不小心走入了一个迷宫&#xff0c;迷宫可以看成是由n * n的格点组成&#xff0c;每个格点只有2种状态&#xff0c; 0和1&#xff0c;前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时&#xff0c;他只能移动到东南西北(…

一些知识点

springsecurity 认证流程 usernamepasswordAuthenticationFilter:用户名密码过滤 掉用AuthenticationManager:认证管理器&#xff0c;控制整个认证流程 调用uthenticationProvider:认证提供器&#xff0c;匿名访问&#xff0c;用户名密码访问&#xff0c;不同的访问有不同的提供…

Mac逆向Electron应用

工具库 解压asar文件 第一步 找到应用文件夹位置 打开活动监视器&#xff1a; 搜索相关应用 用命令行打开刚才复制的路径即可 open Applications/XXX.app/Contents/Resources/app第二步 解压打包文件 解压asar文件

C++ 多重继承的内存布局和指针偏移

在 C 程序里&#xff0c;在有多重继承的类里面。指向派生类对象的基类指针&#xff0c;其实是指向了派生类对象里面&#xff0c;该基类对象的起始位置&#xff0c;该位置相对于派生类对象可能有偏移。偏移的大小&#xff0c;等于派生类的继承顺序表里面&#xff0c;排在该类前面…

(自适应手机端)响应式服装服饰外贸企业网站模板

(自适应手机端)响应式服装服饰外贸企业网站模板PbootCMS内核开发的网站模板&#xff0c;该模板适用于服装服饰网站、外贸网站等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b;自适应手机端&#xff0c;同一个后台&#xff0…

PG 窗口函数

一&#xff0c;简介 窗口函数也叫分析函数&#xff0c;也叫OLAP函数&#xff0c;通过partition by分组&#xff0c;这里的窗口表示范围&#xff0c;&#xff0c;可以不指定PARATITION BY,会将这个表当成一个大窗口。 二&#xff0c;应用场景 &#xff08;1&#xff09;用于分…

【期末速成】——计算机组成原理(1)

目录 一、什么是计算机的组成 二、冯诺依曼体系结构计算机的特点 三、计算机系统的层次结构 四、机器语言、汇编语言、高级语言, 五、 编译程序、解释程序、汇编程序 六、已知主频、CPI计算程序运行时间 一、什么是计算机的组成 计算机的组成可以分为五个部件和两个信息…

单例模式(C语言)

C语言的设计模式&#xff08;单例模式&#xff09; 单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 #include "stdio.h" #include "stdlib.h"// 定义一个…

Jvm(二)新生代和老年代与GC回收

目录 新生代和老年代 新生代 MinorGC 老年代&#xff08;Old Generation&#xff09; MajorGC Minor GC、Major GC 和 Full GC 三个GC具体区别和使用场景 JVM GC及内存调优的参数 调优建议 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无…

多输入多输出非线性对象的模型预测控制—Matlab实现

本示例展示了如何在 Simulink 中设计多输入多输出对象的闭环模型预测控制。该对象有三个操纵变量和两个测量输出。 一、非线性对象的线性化 运行该示例需要同时安装 Simulink 和 Simulink Control Design。 % 检查是否同时安装了 Simulink 和 Simulink Control Design if ~m…

C语言 指针——指针变量做函数参数:错误案例分析

目录 计算最高分及其学号 计算最高分及其学号

【linux】开机调用python脚本

linux中&#xff0c;可以使用crontab 设置开机自动调用 crontab的安装在前面文章里写过了&#xff0c;不再重复 首先&#xff0c;还是进入crontab配置文件 crontab -e 进入之后&#xff0c;跟其他定时任务不同&#xff0c;只需要在时间配置那里用rebooot 这类之后的两个文件的…

2024最新群智能优化算法:红嘴蓝鹊优化器(Red-billed Blue Magpie Optimizer,RBMO)求解23个函数,提供MATLAB代码

一、红嘴蓝鹊优化器 红嘴蓝鹊优化器&#xff08;Red-billed Blue Magpie Optimizer&#xff0c;RBMO&#xff09;由Fu Shengwei 等人于2024年提出&#xff0c;其灵感来自红嘴蓝鹊的高效合作捕食行为&#xff0c;具体模拟了红嘴蓝鹊的搜索、追逐、攻击猎物和食物储存行为。 参考…

Windows Server安全配置

Windows Server操作系统安全配置&#xff0c;加固windows server。 1、密码安全 设置密码最小长度为10 开始-管理工具-本地安全策略-安全设置-账户策略-密码策略&#xff0c;修改密码长度最小值为10。 2、密码使用期限 设置密码最长使用期限为30天 开始-管理工具-本地安全策…

力扣2965. 找出缺失和重复的数字

题目&#xff1a; 给你一个下标从 0 开始的二维整数矩阵 grid&#xff0c;大小为 n * n &#xff0c;其中的值在 [1, n] 范围内。除了 a 出现两次&#xff0c;b 缺失 之外&#xff0c;每个整数都恰好出现一次 。 任务是找出重复的数字a 和缺失的数字 b 。 返回一个下标从 0 开始…

CAC2.0全生命周期防护,助力企业构建安全闭环

5月29日&#xff0c;CACTER邮件安全团队凭借多年的邮件安全防护经验&#xff0c;在“防御邮件威胁-企业如何筑起最后防线”直播分享会上展示了构建安全闭环的重要性&#xff0c;并深入介绍了全新CAC 2.0中的“威胁邮件提示”功能。 下滑查看更多直播精彩内容 构建安全闭环的必要…

HackTheBox-Machines--Mirai

Mirai 测试过程 1 信息收集 NMAP 80 端口 指纹识别 目录扫描 http://10.129.141.121/versions http://10.129.141.121/admin 检查 /admin 下接口&#xff0c;发现 http://10.129.141.121/admin/index.php?login 请求&#xff0c;仅密码未知&#xff0c;可以尝试对密码进行爆…

OpenGL 和 DirectX 矩阵 乘法 左乘和右乘,glm和DirectXMath。 OpenGL用列矩阵 在 glsl中反转矩阵

在OpenGL中,矩阵运算通常使用GLM(OpenGL Mathematics)库来进行。GLM库提供了与OpenGL兼容的数学运算功能,包括矩阵和向量的操作。而在DirectX中,矩阵运算通常使用DirectXMath库。 GLM和DirectXMath都遵循列主序存储矩阵元素,但它们在矩阵乘法的顺序上有所不同:GLM使用的…