微信登录

表单登录 - 登录处理 - 处理登录请求

Java - Web - Spring 《表单登录 - 登录处理 - 处理登录请求》

一、引言

在 Web 应用程序中,用户登录是一个非常常见且重要的功能。Spring 框架为我们提供了强大的支持,使得处理表单登录变得相对简单。本文将详细介绍如何使用 Spring 框架来处理表单登录请求,包括前端表单的创建、后端控制器的编写以及数据验证等方面。

二、项目准备

2.1 环境搭建

我们使用 Spring Boot 来快速搭建项目,你可以通过 Spring Initializr(https://start.spring.io/) 来创建一个新的 Spring Boot 项目,添加以下依赖:

  • Spring Web
  • Thymeleaf(用于前端页面渲染)

2.2 项目结构

项目的基本结构如下:

  1. src
  2. ├── main
  3. ├── java
  4. └── com
  5. └── example
  6. └── demo
  7. ├── controller
  8. └── LoginController.java
  9. ├── model
  10. └── User.java
  11. └── DemoApplication.java
  12. └── resources
  13. ├── static
  14. ├── templates
  15. ├── login.html
  16. └── welcome.html
  17. └── application.properties

三、前端表单创建

templates 目录下创建 login.html 文件,代码如下:

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Login Page</title>
  6. </head>
  7. <body>
  8. <h1>Login</h1>
  9. <form action="#" th:action="@{/login}" th:object="${user}" method="post">
  10. <label for="username">Username:</label>
  11. <input type="text" id="username" th:field="*{username}" required><br><br>
  12. <label for="password">Password:</label>
  13. <input type="password" id="password" th:field="*{password}" required><br><br>
  14. <input type="submit" value="Login">
  15. </form>
  16. </body>
  17. </html>

这个表单包含两个输入框,分别用于输入用户名和密码,点击提交按钮后会将表单数据发送到 /login 接口。

四、后端处理

4.1 创建用户模型

model 包下创建 User.java 类,代码如下:

  1. package com.example.demo.model;
  2. public class User {
  3. private String username;
  4. private String password;
  5. public String getUsername() {
  6. return username;
  7. }
  8. public void setUsername(String username) {
  9. this.username = username;
  10. }
  11. public String getPassword() {
  12. return password;
  13. }
  14. public void setPassword(String password) {
  15. this.password = password;
  16. }
  17. }

这个类用于封装用户输入的用户名和密码。

4.2 创建控制器

controller 包下创建 LoginController.java 类,代码如下:

  1. package com.example.demo.controller;
  2. import com.example.demo.model.User;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.ui.Model;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.PostMapping;
  7. @Controller
  8. public class LoginController {
  9. @GetMapping("/login")
  10. public String showLoginForm(Model model) {
  11. model.addAttribute("user", new User());
  12. return "login";
  13. }
  14. @PostMapping("/login")
  15. public String processLogin(User user, Model model) {
  16. // 模拟验证逻辑
  17. if ("admin".equals(user.getUsername()) && "password".equals(user.getPassword())) {
  18. model.addAttribute("username", user.getUsername());
  19. return "welcome";
  20. } else {
  21. model.addAttribute("error", "Invalid username or password");
  22. return "login";
  23. }
  24. }
  25. }
  • showLoginForm 方法用于处理 GET 请求,返回登录页面,并将一个空的 User 对象添加到模型中。
  • processLogin 方法用于处理 POST 请求,接收用户输入的用户名和密码,进行简单的验证。如果验证通过,将用户名添加到模型中并返回欢迎页面;否则,添加错误信息并返回登录页面。

4.3 创建欢迎页面

templates 目录下创建 welcome.html 文件,代码如下:

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Welcome</title>
  6. </head>
  7. <body>
  8. <h1>Welcome, <span th:text="${username}"></span>!</h1>
  9. </body>
  10. </html>

这个页面会显示欢迎信息,其中用户名会从模型中获取。

五、运行项目

启动 DemoApplication 类,访问 http://localhost:8080/login,你将看到登录页面。输入用户名 admin 和密码 password,点击登录按钮,将跳转到欢迎页面;输入其他信息将显示错误信息。

六、总结

步骤 描述
前端表单创建 使用 Thymeleaf 创建包含用户名和密码输入框的登录表单,提交到 /login 接口
后端模型创建 创建 User 类用于封装用户输入的信息
后端控制器编写 编写 LoginController 处理 GET 和 POST 请求,实现登录验证逻辑
前端欢迎页面创建 创建 welcome.html 页面显示欢迎信息

通过以上步骤,我们实现了一个简单的表单登录功能。在实际项目中,你可以根据需求对验证逻辑进行扩展,例如从数据库中查询用户信息等。希望本文能帮助你理解 Spring 框架中表单登录请求的处理过程。

表单登录 - 登录处理 - 处理登录请求