【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)){
            // 第三步:设置session
            session.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并点击登录:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python-3.12.0文档解读-内置函数sum()详细说明+记忆策略+常用场景+巧妙用法+综合技巧

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 详细说明 sum(iterable, /, start0) 参数&#xff1a; 返回值&#xff1a; 注意事…

【风力发电】山顶的白色“大风车”你了解吗?

文章目录 术语定义 基本要求 外部条件 电气系统 控制系统 参考资料 术语定义 风力发电机组wind turbine generator system;WTGS&#xff0c;将风的动能转换为电能的系统。示例如下&#xff1a; 支撑结构support structure&#xff0c;风力发电机组的塔架和基础部分。 机舱…

NVIDIA NeMo - 训练本地化多语种 LLM

本文转载自&#xff1a;使用 NVIDIA NeMo 训练本地化多语种 LLM &#xff08;2024年 5月 17日 By Nicole Luo and Amit Bleiweiss 第 1 部分 https://developer.nvidia.com/zh-cn/blog/training-localized-multilingual-llms-with-nvidia-nemo-part-1/ 第 2 部分 https://deve…

优盘打不开的困境与解决之道

在日常的工作和生活中&#xff0c;优盘作为一种便携式存储设备&#xff0c;因其小巧、轻便和容量大等特点而备受青睐。然而&#xff0c;当优盘突然无法打开时&#xff0c;我们往往会陷入一片混乱之中&#xff0c;担心存储在其中的重要数据会因此丢失。本文将详细解析优盘打不开…

服务器进不去conda环境问题

source ~/.bashrc 立即重新加载和应用 .bashrc 配置文件中的设置。当你对 .bashrc 文件进行了修改&#xff0c;比如添加或修改了环境变量、别名(alias)、函数等功能后&#xff0c;通常需要执行这个命令来让这些更改在当前终端会话中生效&#xff0c;而无需关闭并重新打开终端。…

牛客网刷题 | BC111 空心正方形图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

解决mysql5.7版本中,子查询order by后,对子查询进行group by分组获取最新记录无效的问题

目录 场景简介原因示例mysql5.7之前的版本mysql5.7之后的版本解决1、使用having2、使用limit3、使用子查询获取目标数据ID 场景简介 子查询order by后&#xff0c;对子查询进行group by分组获取最新记录失败 应用场景&#xff1a;一对多的关系&#xff0c;通常需要取最新、最…

牛客网刷题 | BC107 箭形图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

IO流(2)

缓冲流 字节缓冲流 利用字节缓冲区拷贝文件&#xff0c;一次读取一个字节&#xff1a; public class test {public static void main(String [] args) throws IOException {//利用字节缓冲区来拷贝文件BufferedInputStream bisnew BufferedInputStream(new FileInputStream(&…

【CTF MISC】XCTF GFSJ0008 low Writeup(LSB隐写+QR Code识别)

low 暂无 解法 用 StegSolve 打开&#xff0c;Green plane 1 中疑似隐藏有二维码。 使用大佬写的代码&#xff1a; from PIL import Imageimg Image.open("./low.bmp") img_tmp img.copy() pix img_tmp.load() width, height img_tmp.size for w in range(wid…

[论文精读]Supervised Community Detection with Line Graph Neural Networks

论文网址:[1705.08415] Supervised Community Detection with Line Graph Neural Networks (arxiv.org) 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 ⭐内涵大量可视…

基于Springboot开发的外卖餐购项目(后台管理+消费者端)

免费获取方式↓↓↓ 项目介绍039&#xff1a; 系统运行 后端登录页: http://localhost:8081/backend/page/login/login.html 消费端请求:消费端主页: http://localhost:8081/front/index.html 管理员账号 admin 123456 消费者不需要登录 采用技术栈 前端&#xff1a;Eleme…

嵌入式期末复习

一、选择题&#xff08;20&#xff09; 二、判断题&#xff08;10&#xff09; 三、填空题&#xff08;10&#xff09; 主机-目标机的文件传输方式主要有串口传输方式、网络传输方式、USB接口传输方式、JTAG接口传输方式、移动存储设备方式。常用的远程调试技术主要有 插桩/st…

设计模式(八)结构型模式---装饰者模式

文章目录 装饰者模式简介结构UML图具体实现UML图代码实现 装饰者模式简介 装饰者模式&#xff08;Decorator Pattern&#xff09;是动态的将新对象依附到对象上。相当于对象可以包裹对象本身&#xff0c;然后可以根据递归方式获取想要的信息。实际使用&#xff1a; JDK中的IO流…

python根据版本下载外部库的.whl文件、python下载离线whl文件、python查找whl历史版本

文章目录 一、python下载外部库的.whl文件 当遇到pip源中没有对应的包&#xff0c;或者网络波动时&#xff0c;可能出现需要离线安装的方法。这里记录一下下载安装whl文件的操作。 一、python下载外部库的.whl文件 1、在浏览器输入https://pypi.org/进入PYPI官网 2、在弹出的…

LitCTF 2024(公开赛道)——WP

目录 Misc 涐贪恋和伱、甾―⑺d毎兮毎秒 你说得对&#xff0c;但__ 盯帧珍珠 Everywhere We Go 关键&#xff0c;太关键了! 女装照流量 原铁&#xff0c;启动&#xff01; 舔到最后应有尽有 The love Web exx 一个....池子&#xff1f; SAS - Serializing Authent…

WSL2-Ubuntu22.04-配置

WSL2-Ubuntu22.04-配置 准备1. WSL相关命令[^1]2. WSL2-Ubuntu22.04可视化3. WSL2 设置 CUDA4. 设置OpenGL 本文介绍了WSL2的基本使用方法及可视化&#xff0c;着重介绍了GPU和OpenGL的设置。 准备 名称版本windows11wsl2CUDA12.5 1. WSL相关命令1 查看已安装的wsl distribut…

大话C语言:第21篇 数组

1 数组概述 数组是若干个相同类型的变量在内存中有序存储的集合。 数组是 C 语言中的一种数据结构&#xff0c;用于存储一组具有相同数据类型的数据。 数组在内存中会开辟一块连续的空间 数组中的每个元素可以通过一个索引&#xff08;下标&#xff09;来访问&#xff0c;索…

网上帮别人开网店卖货的骗局!

小红书帮别人开店卖货的骗局主要涉及到一些不法分子利用小红书平台的流量和用户信任度&#xff0c;通过虚假宣传、承诺高额利润等手段&#xff0c;诱骗用户开店并**所谓的“赚钱机会”。 这些骗局往往以“轻松创业、快速致富”为诱饵&#xff0c;吸引那些对创业充满热情但缺乏经…