Sprint Boot登录案例

简介

把之前的增删改查项目改一改,添加一个登录界面(login),如果直接从URL中访问index页,则提示先登录然后跳转到login页面

项目规划

MYSQL中添加user表,写入一些数据,用来存放登录数据

项目中在pojo中添加User.java实体类,用来对接MYSQL中的user表的字段

创建UserMapper

创建UserService.java

创建UserController.java(登录/注册接口)

创建login.html前端登录界面

创建MyBatis XML映射文件

开发

1.项目文件结构

2.User.java

typescript 复制代码
package com.example.easy_add_del_change_select.pojo;

import lombok.Data;

public class User {
    private int id;
    private String username;
    private String password;

    public User(){}
    public User(String username,String password){
        this.username=username;
        this.password=password;
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString(){
        return "id="+id+",username="+username+",password="+password;
    }
}

3.UserMapper.java

java 复制代码
package com.example.easy_add_del_change_select.mapper;

import com.example.easy_add_del_change_select.pojo.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
    // 登录查询
    User login(String username, String password);
    // 注册
    void register(User user);
}

4.UserService.java

typescript 复制代码
package com.example.easy_add_del_change_select.service;

import com.example.easy_add_del_change_select.mapper.UserMapper;
import com.example.easy_add_del_change_select.pojo.User;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Resource
    private UserMapper userMapper;

    public User login(String username, String password) {
        return userMapper.login(username, password);
    }

    public void register(User user) {
        userMapper.register(user);
    }
}

5.UserController.java

kotlin 复制代码
package com.example.easy_add_del_change_select.controller;

import com.example.easy_add_del_change_select.pojo.User;
import com.example.easy_add_del_change_select.service.UserService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;

    // 登录
    @PostMapping("/login")
    public String login(String username, String password, HttpSession session) {
        User user = userService.login(username, password);
        if (user != null) {
            // 登录成功,存入session
            session.setAttribute("loginUser", user);
            return "success";
        }
        return "fail";
    }

    // 注册
    @PostMapping("/register")
    public String register(@RequestBody User user) {
        userService.register(user);
        return "success";
    }

    // 退出登录
    @GetMapping("/logout")
    public String logout(HttpSession session) {
        session.invalidate();
        return "logout";
    }

    //检测登录的接口
    @GetMapping("/checkLogin")
    public String checkLogin(HttpSession session) {
        User user = (User) session.getAttribute("loginUser");
        return user == null ? "nologin" : "login";
    }
}

6.login.html

xml 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        body{margin-top: 100px;}
    </style>
</head>
<body>
<div align="center">
    <h2>用户登录</h2>
    <form id="loginForm">
        账号:<input type="text" name="username" id="username"><br><br>
        密码:<input type="password" name="password" id="password"><br><br>
        <button type="button" onclick="login()">登录</button>
        <button type="button" onclick="register()">注册</button>
    </form>
</div>

<script>
    // 登录
    function login() {
        let username = $("#username").val();
        let password = $("#password").val();

        $.post("/user/login", {
            username: username,
            password: password
        }, function(res) {
            if (res === "success") {
                alert("登录成功!");
                location.href = "index.html"; // 跳商品页
            } else {
                alert("账号或密码错误");
            }
        });
    }

    // 注册
    function register() {
        let username = $("#username").val();
        let password = $("#password").val();

        $.ajax({
            url: "/user/register",
            type: "post",
            contentType: "application/json",
            data: JSON.stringify({
                username: username,
                password: password
            }),
            success: function(res) {
                alert("注册成功!请登录");
            }
        });
    }
</script>
</body>
</html>

7.UserMapper.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.easy_add_del_change_select.mapper.UserMapper">

    <!-- 登录 -->
    <select id="login" resultType="com.example.easy_add_del_change_select.pojo.User">
        select * from user where username=#{param1} and password=#{param2}
    </select>

    <!-- 注册 -->
    <insert id="register">
        insert into user(username,password) values(#{username},#{password})
    </insert>
</mapper>

8.数据库

创建表

sql 复制代码
 CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(50) NOT NULL);

插入数据

sql 复制代码
 insert into user value(0,'1001','123456'),(1,'1002','456789'),(2,'1003','9245');
相关推荐
juniperhan9 分钟前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_1800790547310 分钟前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路30 分钟前
C++23概述
java·c++·c++23
专注API从业者1 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠2 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY2 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克33 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠3 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌3 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局4 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化