综合性练习(后端代码练习2)——用户登录

news2025/5/14 8:34:39

目录

一、准备工作

二、约定前后端交互接口

1、需求分析

2、接口定义

1、输入账户密码界面

2、当前登录的用户界面

三、实现服务端代码

四、调整前端页面代码

1、login.html代码:

页面跳转的三种方式:

2、index.html代码:

五、运行测试


需求:用户输入账户和密码,后端进行校验账户和密码是否正确。

1、如果不正确,前端要告知用户(提示信息)。

2、如果正确,跳转页面,跳转的页面显示当前用户登录。

3、后续再访问首页,可以获取到用户登录信息。

一、准备工作

        创建一个Spring Boot项目,把下面两个前端代码复制进去,如图:        

        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>


  </script>
</body>

</html>

        页面如下:

        

        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>

    </script>
</body>

</html>

        页面如下:

        


二、约定前后端交互接口

1、需求分析

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

1、登录页面:通过账号和密码,校验输入的账户密码是否正确,并告知前端。

2、首页:告知前端当前登录用户。如果当前已有用户登录,返回登录的账号,如果没有,返回空。

2、接口定义

1、输入账户密码界面

        校验接口:

请求路径:/user/login

请求方式:POST

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

        请求参数:

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

        响应数据:

Content-Type:text/html

响应内容:

        true //账号密码验证成功

        false //账户密码验证失败

2、当前登录的用户界面

        校验接口:

请求路径:/user/index

请求方式:GET

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

        请求参数:无

        响应数据:

Content-Type:text/html

响应内容:admin(返回当前登录的用户)


三、实现服务端代码

@RestController
    @RequestMapping("/user")
public class UserController {

    @RequestMapping("/login")
    public Boolean login(String userName, String password, HttpSession session) {
        //参数校验
//        if(userName == null || userName.length() == 0
//            || password == null || password.length() == 0) {
//            return false;
//        }
        //Spring MVC 提供了更方便写法
        if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
            return false;
        }
        //判断账户密码是否正确
        //上面已经做了判空处理,userName不会为空,但下面的写法也是一种习惯
        if("admin".equals(userName) && "admin".equals(password)) {
            session.setAttribute("userName", userName);
            return true;
        }
        return false;
    }
    @RequestMapping("/index")
    //两种写法
//    public String getUserName(HttpSession session) {
//        return (String) session.getAttribute("userName");
//    }
    public String getUserName(@SessionAttribute("userName") String userName) {
        return userName;
    }
}

        因为是初学,所以这里不涉及到数据库,就直接把用户名和密码写死了,都定义成 admin。


四、调整前端页面代码

1、login.html代码:

        对于前端而言,点击登录按钮时,需要把用户输入的信息传递到后端进行校验,后端校验成功,就跳转的:index.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()
        },
        //http响应成功
        success: function(result) {
          if(result == true) {
            //页面跳转
            location.href ="index.html";
            // location.assign("index.html");
            // location.replace("index.html");
          } else{
            alert("密码错误");
          }
        }
      });
    }

  </script>
</body>

</html>

页面跳转的三种方式:

1、window.location.href="book_list.html";

2、window.location.assign("book_list.html);

3、window.location.replace("book_list.html);

        以上的写法,通常把 “window.” 省略,比如 window.location.href="book_list.html"; 写成 location.href="book_list.html"; 。上面的三种写法区别,可参考:location.assign()、location.href、location.replace(url)的不同-阿里云开发者社区 (aliyun.com)

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/index",
            type: "get",
            success: function(loginName) {
                $("#loginUser").text(loginName);
            }
        });
    </script>
</body>

</html>

五、运行测试

        用户名和密码都输入:admin

        

        点击登录,跳转到如下页面:

        

        这个页面多次刷新,依然可以获取到登录用户,如果重启服务器,再刷新这个页面,就会发现为空了,如图:

        

如果登录页面输入错误,就会有弹窗信息:密码错误,如图:


都看到这了,点个赞再走吧,谢谢谢谢谢

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

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

相关文章

推荐一个好用的命令行工具ShellGPT

ShellGPT 配置安装常用功能聊天写命令并执行 高级功能函数调用角色管理 总结 这两天突然想到&#xff0c;现有的很多工具都在被大模型重构&#xff0c;比如诞生了像perplexity.ai 这种新交互形式的搜索引擎&#xff0c;就连wps也推出了AI服务&#xff0c;甚至都可以直接生成ppt…

信源信息数智化招采平台赋能各行业信创生态建设

信创&#xff0c;即“信息化应用创新”&#xff0c;是保障国家数据安全、网络安全的重要基础&#xff0c;也是新基建的重要组成部分。加强IT基础设施、软件、硬件、安全等领域的防护能力&#xff0c;实现国产化自主可控&#xff0c;是招采供应链数字化转型必须面对的课题。 全…

[二叉树] 二叉树的前中后三序遍历#知二求一

标题&#xff1a;[二叉树] 二叉树的前中后三序遍历#知二求一 水墨不写bug &#xff08;图片来源于网络&#xff09; 正文开始&#xff1a; 其实这一类题就是考察对二叉树的结构理解&#xff0c;此类题目的二叉树一般通过数组传入&#xff0c;我们只需根据二叉树的就够特点对数…

今日科普:认识颅脑肿瘤

颅脑肿瘤&#xff0c;这个医学名词常常令人心生畏惧&#xff0c;但其实它是指发生在大脑、小脑、脑膜等部位的肿瘤。这些肿瘤可能源于颅内组织&#xff0c;也可能是由身体其他部位的肿瘤转移而来。令人欣慰的是&#xff0c;并非所有颅内肿瘤都是恶性的&#xff0c;良性肿瘤和恶…

windows浅尝NW.js

windows浅尝NW.js 在本指南中&#xff0c;我们将详细介绍如何在windows上部署NW.js,实现应用的构成、启动方式、开发环境 环境部署 首先我们需要从官网下载对应的压缩包 (https://nwjs.io/downloads/) 下载完成后解压&#xff0c;可以看到对应的文件目录 然后我们运行目录下…

【LangChain系列 12】Prompt模版——序列化

本文速读&#xff1a; PromptTemplate FewShotPromptTemplate 通常prompt以文件形式存储比python代码更好&#xff0c;一方面可以更容易共享、存储。本文将介绍在LangChain中如何对prompt以不同的方式序列化。 一般来说&#xff0c;对于序列化有以下两个设计原则&#xff1a…

牛客热题:合并K个升序链表

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;合并K个升序链表题目链接&#…

周三多《管理学原理》第3版/考研真题/章节练习题

普通高等教育“十一五”国家级规划教材《管理学原理》&#xff08;第3版&#xff0c;周三多、陈传明、龙静编著&#xff0c;南京大学出版社&#xff09;是我国高校广泛采用的管理学权威教材之一&#xff0c;也被众多高校&#xff08;包括科研机构&#xff09;指定为考研考博专业…

开源医疗大模型排行榜: 健康领域大模型基准测试

开源医疗大模型排行榜: 健康领域大模型基准测试 文章目录 开源医疗大模型排行榜: 健康领域大模型基准测试一、引言二、数据集、任务和评估设置1、MedQA2、MedMCQA3、PubMedQA4、MMLU 子集 (医学和生物学) 三、洞察与分析四、提交你的模型以供评估五、下一步是什么&#xff1f;扩…

node.js 解析post请求 方法二

前提&#xff1a;以前面发的node.js解析post请求方法一为模板&#xff0c;具体见 http://t.csdnimg.cn/ABaIn 此文我们运用第二种方法&#xff1a;使用第三方模块formidable对post请求进行解析。 1》代码难点 *** 在Node.js中使用formidable模块来解析POST请求主要涉及到处理…

74、堆-数组中的第K个最大元素

思路&#xff1a; 直接排序是可以的&#xff0c;但是时间复杂度不符合。可以使用优先队列&#xff0c;代码如下&#xff1a; class Solution {public int findKthLargest(int[] nums, int k) {if (numsnull||nums.length0||k<0||k>nums.length){return Integer.MAX_VAL…

网工内推 | 互联网大厂百度、虎牙项目管理岗,15薪,PMP认证优先

01 百度在线 招聘岗位&#xff1a;商业项目管理组_项目管理 职责描述&#xff1a; 1. 商业部核心项目管理工作&#xff0c;主导制定项目目标、计划&#xff0c;推进项目实施及交付&#xff0c;有效管控项目进度、成本、质量、风险等 2. 商业技术/业务创新氛围建设&#xff0c;…

SQL底层执行过程

MySQL 的查询流程 客户端请求连接器 负责与客户端的通信,是半双工模式&#xff08;半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。&#xff09;&#xff0c;验证请求用户的账户和密码是否正确&#xff0c;③如果用户的账户和密码验…

Linux基础——Linux开发工具(下)_make/makefile

前言&#xff1a;在经过前面两篇学习&#xff0c;大家对Linux开发工具都有一定的了解&#xff0c;而在此之前最重要的两个工具就是vim&#xff0c;gcc。 如果对这两个工具不太了解&#xff0c;可以先阅读这两篇文章&#xff1a; Linux开发工具 (vim) Linux开发工具 (gcc/g) 首先…

跟TED演讲学英文:Innovating to zero! by Bill Gates

Innovating to zero! Link: https://www.ted.com/talks/bill_gates_innovating_to_zero Speaker: Bill Gates Date: February 2010 文章目录 Innovating to zero!IntroductionVocabularyTranscriptQ&A with Chris AndersonSummary后记 Introduction At TED2010, Bill Ga…

.NET C# ORM 瀚高数据库

SqlSugar ORM SqlSugar 是一款 老牌 .NET开源ORM框架&#xff0c;由果糖大数据科技团队维护和更新 &#xff0c;开箱即用最易上手的ORM 优点 &#xff1a;【生态丰富】【高性能】【超简单】 【功能全面】 【多库兼容】【适合产品】 【SqlSugar视频教程】 支持 &#xff1a…

判断字符串由几个单词组成(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int world 0;int i 0;char c 0;char string[81] { 0 };int num 0;//提示用户&#xff…

一个docker配置mysql主从服务器

这也就是因为穷&#xff0c;不然谁用一个docker配置主从&#xff0c;哈哈 既然成功了就记录下。过程挺折磨人的。 首先要保证你的电脑安装好了docker 为了保证docker当中主从能正常连网&#xff0c;现在docker里面创建一个网络环境 docker network create --driver bridge mysq…

C++-9

C 1.已知C风格的字符串&#xff0c;完成对字符串通过下标访问时的异常处理机制(越界访问) 2.写一个程序&#xff0c;程序包含两个类&#xff0c;类中实现一个成员函数&#xff0c;MyGetChar(), 类A中每调用一 次&#xff0c;按顺序得到一个数字字符&#xff0c;比如第-次调用得…

社交论坛问答发帖系统源码-java+vue+uniapp开发前后端

源码说明&#xff1a; 前后端分离社交论坛问答发帖BBS源码&#xff0c;社交论坛小程序|H5论坛。 下 载 地 址 &#xff1a; runruncode.com/php/19462.html 该项目是一个使用Java、Vue和Uniapp开发的前后端分离的社交论坛问答发帖/BBS项目。它包括了论坛图文帖、视频、圈子…