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');
相关推荐
咩咩啃树皮2 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚3 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白4 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司5 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地6 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun3141596 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风8 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
z123456789869 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin52112310 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
做个文艺程序员10 小时前
Linux第24篇:Java应用监控体系搭建:Prometheus+Grafana可视化运维
java·grafana·prometheus