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多线程消息队列的功能,可以通过以下步骤完成: 第一步:定义消息类 定义一个消息类,可以包含消息ID、消息内容、消息时间等属性。 public class Message { private int messageId; private String content; private Date createTime; public Messag…

    Java 2023年5月19日
    00
  • 详解Maven命令大全

    下面我将详细讲解“详解Maven命令大全”的完整攻略。 一、Maven命令简介 Maven是一个用于Java项目的构建和管理工具。它利用POM(Project Object Model)来描述项目,可以管理项目的构建、输出、文档、报告以及依赖等。下面是Maven常用的一些命令。 1. mvn clean 清除Maven项目工程的目录,删除target目录下的…

    Java 2023年5月20日
    00
  • SpringBoot MyBatis简单快速入门例子

    下面我为您介绍一下”SpringBoot MyBatis简单快速入门例子”的完整攻略。 1. 概述 Spring Boot 是一种快速开发应用程序的框架,它可以通过简单的配置来启动 Web 应用程序和服务。MyBatis 是一种 Java 持续层框架,它简化了数据库操作的过程。 在本文中,我们将讨论如何在 Spring Boot 中使用 MyBatis 进行…

    Java 2023年5月19日
    00
  • java 发送 http 请求练习两年半(HttpURLConnection)

    1、起一个 springboot 程序做 http 测试: @GetMapping(“/http/get”) public ResponseEntity<String> testHttpGet(@RequestParam(“param”) String param) { System.out.println(param); return Resp…

    Java 2023年4月22日
    00
  • Java多线程编程中ThreadLocal类的用法及深入

    Java多线程编程中ThreadLocal类的用法及深入详解 什么是ThreadLocal类? ThreadLocal是Java中一个非常重要的线程工具类。它为每个线程提供了一个单独的副本,可以在整个线程的声明周期中使用,且该副本可以在任何时候被当前线程访问。该工具类通常用于线程安全地处理共享对象。 ThreadLocal类的用法 ThreadLocal类是…

    Java 2023年5月19日
    00
  • java实现输出任意整数的每一位

    下面是java实现输出任意整数的每一位的完整攻略。 步骤一:将整数转成字符串 我们知道,字符串中每个字符都可以通过下标访问。所以,我们只需要将整数转换成字符串,就可以通过下标依次访问每个数字了。 int num = 123456; String numStr = String.valueOf(num); // 将整数转换成字符串 步骤二:遍历字符串,输出每一…

    Java 2023年5月26日
    00
  • 在idea中创建SpringBoot项目

    下面我会给出详细的教程步骤。 一、安装Java和IntelliJ IDEA 在创建SpringBoot项目之前,您需要先安装Java和IntelliJ IDEA开发工具。 如果您还没有Java环境,请先从官方网站中下载并安装JAVA环境。请注意,SpringBoot 2.x版本至少需要Java 8。 然后,在官方网站上下载适合您操作系统的IntelliJ I…

    Java 2023年5月15日
    00
  • 一篇文章带你深入了解Java线程池

    一篇文章带你深入了解Java线程池 什么是线程池? 线程池是一个线程队列管理器,大大提高了多线程的处理效率。在开发中使用线程池可以避免多次创建和销毁线程带来的性能开销,提高程序的稳定性和性能表现。 Java中的线程池 Java中的线程池是由ThreadPoolExecutor和Executors来实现的,其中Executors是一个线程池的工厂类,提供了很多…

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