基于SpringBoot+HTML实现登录注册功能模块

简介: 基于SpringBoot+HTML实现登录注册功能模块

一、登陆注册实现思路

实现登录和注册功能可以分为以下几个步骤:

  1. 设计数据库表结构:首先,你需要设计用户表,包含用户名、密码等字段。你也可以考虑使用加密算法存储密码,比如BCrypt。
  2. 创建Spring Boot项目:使用Spring Initializr创建一个新的Spring Boot项目,并添加相应的依赖,比如Spring Web、Spring Data JPA等。
  3. 编写实体类:根据数据库表结构,在Java中创建相应的实体类,用于映射数据库表。
  4. 编写Repository接口:创建一个Repository接口,用于执行数据库操作,比如查询用户信息、保存用户信息等。
  5. 编写Service层:创建一个Service层,包含业务逻辑,比如验证用户登录、注册新用户等。在这个层次你可以加入密码加密、验证等逻辑。
  6. 创建Controller:创建Controller来处理用户的登录和注册请求。Controller接收请求参数,调用Service层方法完成相应的业务逻辑。
  7. 编写前端页面:创建HTML页面用于用户登录和注册。可以使用表单来收集用户信息,并通过Ajax或者普通的表单提交来发送数据到后端。
  8. 测试和调试:在完成上述步骤后,进行测试和调试,确保功能的正常运行。

登录页面

注册页面

运行页面截图

二、实现具体步骤

1. 设计数据库表结构

CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);

2. 创建Spring Boot项目

使用Spring Initializr创建一个新的Spring Boot项目,添加Spring Web和Spring Data JPA依赖。

3. 编写实体类

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
 
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String username;
    private String password;
 
    // Getters and setters
}

4. 编写Repository接口

import org.springframework.data.jpa.repository.JpaRepository;
 
public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}

5. 编写Service层

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
 
@Service
public class UserService {
 
    @Autowired
    private UserRepository userRepository;
 
    @Autowired
    private BCryptPasswordEncoder passwordEncoder;
 
    public User registerUser(String username, String password) {
        User existingUser = userRepository.findByUsername(username);
        if (existingUser != null) {
            throw new RuntimeException("Username already exists");
        }
 
        User user = new User();
        user.setUsername(username);
        user.setPassword(passwordEncoder.encode(password)); // Encrypt password
        return userRepository.save(user);
    }
 
    public boolean loginUser(String username, String password) {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            return false;
        }
 
        return passwordEncoder.matches(password, user.getPassword());
    }
}

6. 创建Controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
public class UserController {
 
    @Autowired
    private UserService userService;
 
    @PostMapping("/register")
    @ResponseBody
    public String register(@RequestParam String username, @RequestParam String password) {
        try {
            userService.registerUser(username, password);
            return "Registration Successful";
        } catch (Exception e) {
            return "Registration Failed: " + e.getMessage();
        }
    }
 
    @PostMapping("/login")
    @ResponseBody
    public String login(@RequestParam String username, @RequestParam String password) {
        if (userService.loginUser(username, password)) {
            return "Login Successful";
        } else {
            return "Login Failed";
        }
    }
}

7. 编写前端页面

Register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Register</title>
</head>
<body>
    <h2>Register</h2>
    <form action="/register" method="post">
        <label for="username">Username:</label><br>
        <input type="text" id="username" name="username"><br>
        <label for="password">Password:</label><br>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" value="Register">
    </form>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    <form action="/login" method="post">
        <label for="username">Username:</label><br>
        <input type="text" id="username" name="username"><br>
        <label for="password">Password:</label><br>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" value="Login">
    </form>
</body>
</html>

8.进行测试登陆注册模块

  1. 手动测试
  • 启动你的Spring Boot应用程序。
  • 打开浏览器,并访问注册页面和登录页面(例如,http://localhost:8080/register 和 http://localhost:8080/login)。
  • 在注册页面输入用户名和密码,提交注册表单,确保用户信息正确保存到数据库。
  • 在登录页面输入注册时使用的用户名和密码,提交登录表单,验证登录功能是否正常。
  1. 使用自动化测试
  • 使用Spring Boot提供的测试框架,比如JUnit和SpringBootTest,编写单元测试来测试Service层和Repository层的方法。
  • 编写集成测试来测试Controller层的方法,可以使用MockMvc来模拟HTTP请求和验证返回结果。
  • 可以使用Selenium等工具来进行端到端的UI测试,模拟用户在浏览器中的操作,验证整个系统的功能。

集成测试示例:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerIntegrationTest {
 
    @Autowired
    private MockMvc mockMvc;
 
    @Test
    public void testRegister() throws Exception {
        String username = "testUser";
        String password = "testPassword";
 
        mockMvc.perform(MockMvcRequestBuilders.post("/register")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .param("username", username)
                .param("password", password))
                .andExpect(status().isOk());
    }
 
    @Test
    public void testLogin() throws Exception {
        String username = "testUser";
        String password = "testPassword";
 
        mockMvc.perform(MockMvcRequestBuilders.post("/login")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .param("username", username)
                .param("password", password))
                .andExpect(status().isOk());
    }
}

三、总结

登陆注册功能是Web应用程序中常见的基础功能,其主要作用包括:

1. 用户身份验证:通过登录功能,验证用户输入的用户名和密码是否与系统中存储的信息匹配,从而确认用户的身份。

2. 访问控制:通过用户的身份信息,可以对不同用户提供不同的访问权限,限制用户可以访问的资源或功能。

3. 个性化服务:登录功能可以帮助系统记录用户的偏好和历史行为,从而提供个性化的服务和推荐。

4. 数据安全性:注册功能可以确保用户信息的安全存储,密码通常会进行加密处理,从而提高数据安全性。

进一步实现更复杂的操作可以通过以下方式:

1. 添加验证码功能:为了增强安全性,可以在注册和登录页面添加验证码功能,防止恶意程序进行暴力破解密码。

2. 实现密码找回功能:提供通过邮箱或手机短信等方式找回密码的功能,以应对用户忘记密码的情况。

3. 引入OAuth认证:支持第三方登录,比如使用Google、Facebook等账号登录,提高用户体验。

4. 加入多因素认证:在登录过程中,除了用户名和密码外,还可以要求用户输入其他因素,比如手机验证码或指纹识别,提高安全性。

5. 实现记住我功能:允许用户在下次访问时保持登录状态,避免频繁登录,提高用户体验。

6. 用户信息完善功能:在注册后,引导用户完善个人信息,比如头像、个人简介等,以提供更加个性化的服务。

7. 用户管理功能:提供管理员界面,实现对用户信息的管理,包括禁用账号、修改密码等操作。

8. 安全日志和监控:记录登录日志、异常登录行为等信息,并设置报警机制,及时发现异常情况并采取相应措施。

以上这些扩展和功能可以根据具体的业务需求和安全要求来决定是否实现。

最后谢谢大家

 


相关文章
|
11天前
|
Web App开发
在 HTML 中禁用 Chrome 浏览器的 Google 翻译功能
在 html 标签中添加 translate=“no” 属性,浏览器将不会翻译整个页面。
60 0
|
2天前
|
SQL Java 关系型数据库
基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用
基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用
11 2
|
11天前
|
前端开发 Java
基于SpringBoot实现登录注册
使用SpringBoot实现的登录注册功能,前端负责获取用户信息并发送至后端,后端接收到数据后进行持久化处理。
17 0
|
11天前
|
开发框架 监控 Java
深入探索Spring Boot的监控、管理和测试功能及实战应用
【5月更文挑战第14天】Spring Boot是一个快速开发框架,提供了一系列的功能模块,包括监控、管理和测试等。本文将深入探讨Spring Boot中监控、管理和测试功能的原理与应用,并提供实际应用场景的示例。
21 2
|
11天前
|
Java 索引
vscode + springboot + HTML 搭建服务端(二)
vscode + springboot + HTML 搭建服务端(二)
28 1
|
11天前
|
Java
vscode + springboot + HTML 搭建服务端(一)
vscode + springboot + HTML 搭建服务端(一)
25 1
|
11天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
11天前
|
JavaScript 前端开发
多功能成语查询工具HTML源码
采用本地HTML,JavaScript,js代码编写,自适应端,源码全部开源可二开优化! 功能包含;成语接龙查询、以某个字开头的成语查询、包含某字的成语查询、 第二个字是某字的成语查询上传源码解压缩即可访问,支持上传二级目录访问, 或者是浏览器直接打开html本地访问
26 0
|
11天前
|
SQL Java 数据库连接
一文带你快速学会SpringBoot工程下MaBatis对数据的增删改查功能!
在SpringBoot项目中,已配置好Mybatis和Lombok,数据库tb_user有四条初始数据。需求是按ID删除用户。首先在UserMapper接口添加@Delete注解的删除方法,然后在单元测试类中测试此方法,成功删除ID为4的用户。删除方法可选返回影响的记录数,此处用void。参数名在#{...}内可自定义。通过配置mybatis日志在控制台显示SQL操作。
|
11天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
21 0