一、Spring Boot 簡介
Spring Boot 是基於 Spring Framework 核心的一個快速開發工具,通過自動配置、約定優於配置的方式,簡化了 Spring 應用的開發和部署。Spring Boot 不僅可以幫助我們快速開發 Web 應用,還提供了很多工具和組件,比如安全認證、資料庫操作、緩存操作、消息隊列和郵件等等,極大地提高了我們的開發效率。
二、登錄註冊功能的需求分析
一般情況下,Web 應用都需要用戶登錄和註冊功能,這些功能是基礎中的基礎。
具體用戶需求如下:
- 用戶需要能夠註冊一個新賬號
- 用戶需要能夠使用已有的賬號進行登錄
- 登錄成功後需要能夠跳轉到首頁或者個人中心頁面
- 登錄失敗需要給出相應的錯誤信息提示
三、準備工作
在開始編寫代碼之前,我們需要進行一些準備工作:
- 安裝 JDK 8 或以上版本
- 安裝 Maven
- 安裝任意一種 IDE,比如 Eclipse、IntelliJ IDEA 等
接下來,我們就可以開始創建一個基於 Spring Boot 的 Web 項目。
四、創建 Spring Boot 項目
我們可以使用 Spring Initializr 來快速創建一個 Spring Boot 項目。
- 打開https://start.spring.io/網站
- 選擇項目信息
- 選擇項目語言:Java
- 選擇 Spring Boot 版本:2.3.0 或以上版本
- 輸入項目信息:GroupId、ArtifactId、Name、Description 等
- 選擇項目依賴:Web、Spring Security、MyBatis(或其他的資料庫框架)等
- 點擊 Generate 按鈕下載項目模板
- 解壓下載的項目模板到本地目錄
五、實現登錄註冊功能
1. 資料庫設計
在登錄註冊功能實現中,我們需要兩個數據表:
CREATE TABLE user (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL,
email VARCHAR(50) UNIQUE NOT NULL,
create_time datetime NOT NULL
);
CREATE TABLE user_role (
user_id INT NOT NULL,
role_id INT NOT NULL,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES user(user_id),
FOREIGN KEY (role_id) REFERENCES role(role_id)
);
這裡的 user 表用來存儲用戶註冊信息,user_role 表用來存儲用戶角色信息。
2. 實現註冊功能
註冊功能主要流程:
- 用戶填寫註冊表單,包括用戶名、郵箱、密碼等信息
- 後端校驗用戶輸入的信息是否合法,如果有錯誤信息需要返回給前端顯示
- 如果信息無誤,將用戶信息保存到資料庫,註冊成功後跳轉到登錄頁面
首先,我們需要創建一個 User 實體類來映射資料庫中的 user 表:
public class User {
private Integer userId;
private String username;
private String password;
private String email;
private Date createTime;
// getter 和 setter 省略
}
接下來,我們需要在 controller 中實現註冊功能,如下所示:
@Autowired
private UserService userService;
@PostMapping("/register")
public String register(User user) {
Result result = userService.register(user);
if (result.getCode() == ResultEnum.SUCCESS.getCode()) {
return "redirect:/login";
} else {
return "register";
}
}
上面的代碼中,我們注入了一個 UserService 對象,調用 register 方法接收用戶信息,如果註冊成功則跳轉到登錄頁面,否則返回註冊頁面並顯示錯誤信息。
UserService 代碼如下所示:
@Autowired
private UserMapper userMapper;
public Result register(User user) {
// 1. 校驗用戶名、郵箱和密碼是否為空,用戶名和郵箱是否已經存在
String username = user.getUsername();
String email = user.getEmail();
String password = user.getPassword();
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(email) || StringUtils.isEmpty(password)) {
return ResultUtils.error(ResultEnum.E1001);
}
if (userMapper.getUserByUsername(username) != null) {
return ResultUtils.error(ResultEnum.E1002);
}
if (userMapper.getUserByEmail(email) != null) {
return ResultUtils.error(ResultEnum.E1003);
}
// 2. 將密碼使用 MD5 加密
String md5Password = MD5Utils.encrypt(password);
// 3. 將用戶信息存儲到資料庫中
user.setPassword(md5Password);
user.setCreateTime(new Date());
userMapper.insertUser(user);
return ResultUtils.success();
}
在 UserService 中,我們首先校驗了用戶名、郵箱和密碼是否為空,以及用戶名和郵箱是否已存在。然後將密碼使用 MD5 加密,並將用戶信息插入到資料庫中。
這裡我們使用了一個 Result 對象來封裝方法的返回結果,其代碼如下所示:
public class Result {
private int code;
private String message;
private Object data;
// getter 和 setter 省略
}
public enum ResultEnum {
SUCCESS(0, "成功"),
E1001(1001, "參數不完整"),
E1002(1002, "用戶名已存在"),
E1003(1003, "郵箱已存在");
private int code;
private String message;
// 構造方法和 getter 省略
}
public class ResultUtils {
public static Result success() {
return success(null);
}
public static Result success(Object data) {
Result result = new Result();
result.setCode(ResultEnum.SUCCESS.getCode());
result.setMessage(ResultEnum.SUCCESS.getMessage());
result.setData(data);
return result;
}
public static Result error(ResultEnum resultEnum) {
Result result = new Result();
result.setCode(resultEnum.getCode());
result.setMessage(resultEnum.getMessage());
return result;
}
}
Result 是一個通用的返回結果封裝類,包括了代碼、消息和數據三個信息。ResultEnum 枚舉類定義了通用的返回狀態碼和錯誤信息,ResultUtils 是一個結果工具類,定義了常用的返回方法,比如成功和失敗,同時可以傳入不同的數據參數。
最後,我們需要在註冊頁面實現註冊表單,如下所示:
<form action="/register" method="post">
<div class="form-group">
<label for="username">用戶名</label>
<input type="text" class="form-control" id="username" name="username">
</div>
<div class="form-group">
<label for="email">郵箱</label>
<input type="email" class="form-control" id="email" name="email">
</div>
<div class="form-group">
<label for="password">密碼</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<button type="submit" class="btn btn-primary">註冊</button>
</form>
3. 實現登錄功能
登錄功能主要流程:
- 用戶填寫登錄表單,包括用戶名和密碼
- 後端校驗用戶輸入的用戶名和密碼是否正確,如果有錯誤信息需要返回給前端顯示
- 如果信息無誤,將用戶信息保存在 session 中,並跳轉到首頁或者個人中心頁面
同樣地,我們需要在 controller 中實現登錄功能,如下所示:
@Autowired
private UserService userService;
@PostMapping("/login")
public String login(String username, String password, HttpSession session) {
User user = userService.login(username, password);
if (user != null) {
session.setAttribute("user", user);
return "redirect:/index";
} else {
return "login";
}
}
上面的代碼中,我們注入了 UserService 對象,調用 login 方法接收用戶名和密碼信息,如果登錄成功則將用戶信息存儲在 session 中,跳轉到首頁或者個人中心頁面,否則返回登錄頁面並顯示錯誤信息。
UserService 代碼如下所示:
@Autowired
private UserMapper userMapper;
public User login(String username, String password) {
// 1. 根據用戶名查詢用戶信息
User user = userMapper.getUserByUsername(username);
if (user == null) {
return null;
}
// 2. 判斷密碼是否正確
String md5Password = MD5Utils.encrypt(password);
if (!md5Password.equals(user.getPassword())) {
return null;
}
return user;
}
在 UserService 中,我們首先查找用戶信息是否存在,然後將用戶輸入的密碼使用 MD5 進行加密,和資料庫中的密碼進行比對,如果正確則返回相應的用戶信息,否則返回 null。
最後,我們需要在登錄頁面實現登錄表單,如下所示:
<form action="/login" method="post">
<div class="form-group">
<label for="username">用戶名</label>
<input type="text" class="form-control" id="username" name="username">
</div>
<div class="form-group">
<label for="password">密碼</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<button type="submit" class="btn btn-primary">登錄</button>
</form>
六、總結
本文介紹了如何使用 Spring Boot 實現登錄註冊功能。具體來說,我們分析了註冊和登錄功能的需求,設計了相應的數據表,實現了後端的校驗和資料庫操作,最後在前端頁面中實現了相應的表單。通過本文,相信讀者可以更加深入地理解 Spring Boot 的核心特性和使用方式。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/244712.html