Spring Boot 是一个用于简化 Spring 应用程序开发的框架,因其开箱即用的特性受到广泛欢迎。在 Web 应用开发中,登录和注册功能是常见且基本的需求。本文将介绍如何使用 Spring Boot 实现一个简单的登录和注册功能。

项目结构

首先,我们需要确定我们的项目结构。一个简单的 Spring Boot 项目结构可以如下所示:

spring-boot-login
│
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               ├── DemoApplication.java
│   │   │               ├── controller
│   │   │               │   └── AuthController.java
│   │   │               ├── model
│   │   │               │   └── User.java
│   │   │               ├── repository
│   │   │               │   └── UserRepository.java
│   │   │               └── service
│   │   │                   └── UserService.java
│   │   └── resources
│   │       ├── application.properties
│   │       └── templates
│   │           ├── login.html
│   │           └── register.html
└── pom.xml

依赖配置

pom.xml 中添加需要的依赖,比如 Spring Web、Spring Data JPA 和 H2 数据库(用于开发和测试):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

数据模型

创建一个用户实体 User.java

package com.example.demo.model;

import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;

    // getters and setters
}

数据访问层

创建用户仓库接口 UserRepository.java

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}

服务层

接下来创建服务层 UserService.java

package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User registerUser(User user) {
        return userRepository.save(user);
    }

    public User findUserByUsername(String username) {
        return userRepository.findByUsername(username);
    }
}

控制器

创建控制器 AuthController.java,处理注册和登录请求:

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class AuthController {

    @Autowired
    private UserService userService;

    @GetMapping("/register")
    public String showRegisterForm(Model model) {
        model.addAttribute("user", new User());
        return "register";
    }

    @PostMapping("/register")
    public String registerUser(User user) {
        userService.registerUser(user);
        return "redirect:/login";
    }

    @GetMapping("/login")
    public String showLoginForm() {
        return "login";
    }

    @PostMapping("/login")
    public String loginUser(String username, String password) {
        User user = userService.findUserByUsername(username);
        if (user != null && user.getPassword().equals(password)) {
            return "redirect:/home"; // 登录成功后重定向
        }
        return "redirect:/login?error"; // 登录失败
    }

    @GetMapping("/home")
    public String home() {
        return "home"; // 登录后的主页
    }
}

前端页面

src/main/resources/templates/ 下创建 register.htmllogin.html 文件。

register.html 示例:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>注册</title>
</head>
<body>
<h1>注册</h1>
<form action="/register" method="post">
    <label>用户名:</label>
    <input type="text" name="username" required />
    <label>密码:</label>
    <input type="password" name="password" required />
    <button type="submit">注册</button>
</form>
<a href="/login">已有账户?登录</a>
</body>
</html>

login.html 示例:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>登录</title>
</head>
<body>
<h1>登录</h1>
<form action="/login" method="post">
    <label>用户名:</label>
    <input type="text" name="username" required />
    <label>密码:</label>
    <input type="password" name="password" required />
    <button type="submit">登录</button>
</form>
<a href="/register">没有账户?注册</a>
</body>
</html>

运行应用

最后,在 DemoApplication.java 中运行应用:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

总结

至此,我们完成了一个简单的 Spring Boot 登录注册功能的实现。可以通过 /register 路径注册新用户,通过 /login 路径登录用户。该项目使用 H2 数据库存储用户信息,适合开发和测试环境。通过这些代码示例,我们展示了 Spring Boot 在 Web 开发中的易用性和高效性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部