SpringBoot实现简单的登录注册的项目实战

Spring Boot 实现简单的登录注册的项目实战

在本文中,我们将介绍如何使用 Spring Boot 实现简单的登录注册功能。我们将使用 Thymeleaf 模板引擎和 Spring Security 安全框架来实现这个项目。

项目需求

我们将实现一个简单的登录注册功能,具体需求如下:

  • 用户可以注册一个新账户。
  • 用户可以使用已注册的账户登录。
  • 登录成功后,用户将被重定向到主页。
  • 登录失败后,用户将收到错误消息。
  • 注册成功后,用户将被重定向到登录页面。

技术栈

  • Spring Boot:2.5.0
  • Thymeleaf:3.0.12
  • Spring Security:5.5.0

实现步骤

以下是实现步骤:

  1. 创建一个名为 SpringBootLoginDemo 的 Spring Boot 项目。

  2. 添加以下依赖项到 pom.xml 文件中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 创建一个名为 User 的实体类:
public class User {

    private String username;
    private String password;

    // 省略 getter 和 setter 方法

}

在上面的示例中,我们创建了一个 User 类,它包含了 username 和 password 属性。

  1. 创建一个名为 UserController 的控制器类:
@Controller
public class UserController {

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

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

    @PostMapping("/register")
    public String register(@ModelAttribute("user") User user) {
        // 保存用户信息到数据库
        return "redirect:/login";
    }

}

在上面的示例中,我们创建了一个 UserController 类,并使用 @Controller 注解将其声明为控制器。我们还创建了三个方法:login、register 和 register。login 方法返回 login.html 模板,register 方法返回 register.html 模板,并将一个新的 User 对象添加到模型中。register POST 方法将用户信息保存到数据库,并重定向到登录页面。

  1. 创建一个名为 SecurityConfig 的配置类:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/register").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user").password("{noop}password").roles("USER");
    }

}

在上面的示例中,我们创建了一个 SecurityConfig 类,并使用 @Configuration 和 @EnableWebSecurity 注解将其声明为配置类。我们还重写了 configure 方法,以配置 Spring Security。我们允许未经身份验证的用户访问注册页面,但要求已经身份验证的用户访问其他页面。我们还配置了登录页面、默认成功页面和注销页面。我们还重写了 configureGlobal 方法,以配置用户身份验证。

  1. 创建一个名为 login.html 的 Thymeleaf 模板:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form th:action="@{/login}" method="post">
        <div>
            <label for="username">Username:</label>
            <input type="text" id="username" name="username"/>
        </div>
        <div>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password"/>
        </div>
        <div>
            <button type="submit">Login</button>
        </div>
    </form>
</body>
</html>

在上面的示例中,我们创建了一个 login.html 模板,它包含了一个表单,用于用户登录。

  1. 创建一个名为 register.html 的 Thymeleaf 模板:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
    <form th:action="@{/register}" th:object="${user}" method="post">
        <div>
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" th:field="*{username}"/>
        </div>
        <div>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" th:field="*{password}"/>
        </div>
        <div>
            <button type="submit">Register</button>
        </div>
    </form>
</body>
</html>

在上面的示例中,我们创建了一个 register.html 模板,它包含了一个表单,用于用户注册。

  1. 启动应用程序。

  2. 访问 http://localhost:8080/register,注册一个新账户。

  3. 访问 http://localhost:8080/login,使用已注册的账户登录。

示例一:使用 Logback 记录日志

以下是一个示例,演示如何在 Spring Boot 应用程序中使用 Logback 记录日志:

  1. 添加依赖项

在 pom.xml 文件中添加以下依赖项:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>
  1. 创建一个名为 logback.xml 的配置文件:
<configuration>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.example" level="DEBUG"/>

    <root level="INFO">
        <appender-ref ref="console"/>
    </root>

</configuration>

在上面的示例中,我们创建了一个名为 console 的控制台输出 appender,并定义了一个名为 com.example 的 logger它的日志级别为 DEBUG。我们还将根 logger 的日志级别设置为 INFO,并将其输出到 console appender。

  1. 启动应用程序。

  2. 访问 http://localhost:8080/users/1,应用程序将返回 id 为 1 的用户信息,并在控制台中记录一条信息。

示例二:使用 SLF4J 记录日志

以下是一个示例,演示如何在 Spring Boot 应用程序中使用 SLF4J 记录日志:

  1. 添加依赖项

在 pom.xml 文件中添加以下依赖项:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
</dependency>
  1. 创建一个名为 UserController 的控制器类:
@RestController
@RequestMapping("/users")
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        logger.info("Getting user by id: {}", id);
        User user = new User();
        user.setId(id);
        user.setName("John Doe");
        user.setAge(30);
        return user;
    }

}

在上面的示例中,我们创建了一个 UserController 类,并使用 @RestController 注解将其声明为控制器。我们还创建了一个名为 logger 的静态变量,并使用 LoggerFactory 类的 getLogger 方法来获取日志记录器。我们还在 getUserById 方法中使用 logger 记录了一条信息。

  1. 创建一个名为 User 的实体类:
public class User {

    private Long id;
    private String name;
    private Integer age;

    // 省略 getter 和 setter 方法

}

在上面的示例中,我们创建了一个 User 类,它包含了 id、name 和 age 属性。

  1. 启动应用程序。

  2. 访问 http://localhost:8080/users/1,应用程序将返回 id 为 1 的用户信息,并在控制台中记录一条信息。

结束语

在本文中,我们介绍了如何使用 Spring Boot 实现简单的登录注册功能,并提供了两个示例。这些技巧可以帮助我们更好地理解 Spring Boot 应用程序的开发流程,并提高开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot实现简单的登录注册的项目实战 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Java编程实现获取当前代码行行号的方法示例

    在讲解“Java编程实现获取当前代码行行号的方法示例”的完整攻略之前,我们先来了解一下所涉及的相关概念: 首先,所谓的行号(line number),就是指代码中每一行所对应的编号。在Java代码中,每个代码文件都有其独立的行号,而且每行都是有编号的。 其次,获取行号有两种常用的方法: 1.使用StackTraceElement类中的getLineNumbe…

    Java 2023年5月26日
    00
  • 通过实例了解JavaBean开发及使用过程解析

    当我们在开发Java应用时,经常需要定义一些Java对象来传递数据。这些对象通常被称为JavaBean。JavaBean是符合特定规范的Java类,它通常具有以下特征: 具有公共的无参数构造函数 存取方法遵循JavaBean的规范 实现可序列化接口 在下面的过程中,我将通过两个实例来说明JavaBean的开发及使用过程: 示例1:开发JavaBean pub…

    Java 2023年6月15日
    00
  • SpringBoot如何实现starter原理详解

    下面是对“SpringBoot如何实现starter原理详解”的详细讲解: 什么是starter 在Spring Boot中,starter是一种基于依赖项的,提供了与特定目标功能相关的,预配置的Spring配置的实现方式。它为应用程序的开发者提供了一种快速启动他们的应用程序所需的依赖项和配置的方法。 在常见的web应用程序中,启动应用程序需要一定程度的常规…

    Java 2023年5月15日
    00
  • Java面向对象程序设计:继承,多态用法实例分析

    Java面向对象程序设计:继承,多态用法实例分析 简介 面向对象程序设计是Java中最重要的编程思想。其中继承和多态是面向对象程序设计中的两大特性。继承和多态的运用可以对代码架构做到高度的灵活和可维护性,是我们编写高质量代码的关键。 继承 继承是Java中面向对象程序设计的核心概念之一。继承可以使我们的代码重用和复用,提高编程效率。在Java中一个类可以继承…

    Java 2023年5月26日
    00
  • Java的Struts框架报错“ActionMappingNotFoundException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“ActionMappingNotFoundException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置Action映射,则可能会出现此。在这种情况下,需要检查配置文件以解决此问题。 编码错误:如果代码中没有正确设置Action映射,则可能会出现此。在这种情况下,需要检查代码以解…

    Java 2023年5月5日
    00
  • Java应用/JVM宕机排查步骤操作

    对于Java应用/JVM宕机排查步骤操作,我们需要进行以下的步骤: 1. 收集日志信息 Java应用程序和JVM宕机时通常会生成日志文件。首先,我们需要定位日志文件,并阅读日志文件,以了解宕机原因。常见的Java日志文件包括: Java虚拟机日志(JVM Log) Tomcat日志文件(catalina.out),如果我们的应用程序是部署在Tomcat容器中…

    Java 2023年5月25日
    00
  • JavaWeb文件上传流程

    JavaWeb文件上传是Web开发中经常遇到的需求,下面将详细讲解JavaWeb文件上传的流程及相关代码示例: 1. 前端文件选择及上传 在前端页面中,需要定义一个表单,使用表单的file类型获取文件,将文件数据通过Ajax发往后端服务器。 下面是一个简单的HTML页面示例,其中包含一个表单和一个上传文件的input标签: <!DOCTYPE html…

    Java 2023年5月19日
    00
  • Java Apache Commons报错“MathException”的原因与解决方法

    “MathException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 无效的数学运算:如果数学运算无效,则可能会出现此错误。在这种情况下,需要检查数学运算以解决此问题。 数学运算溢出:如果数学运算结果超出了数据类型的范围,则可能会出现此错误。在这种情况下,需要使用更大的数据类型或其他方法来解决此问题。 以下是两个实…

    Java 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部