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.html
和 login.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 开发中的易用性和高效性。