Spring Boot Web 登录认证

在现代Web应用中,用户的身份认证是一个至关重要的功能。Spring Boot 提供了一套轻量级的解决方案来实现用户登录认证。本文将介绍如何使用 Spring Boot 和 Spring Security 实现一个简单的登录认证系统。

1. 环境准备

在开始之前,确保你已经安装了以下工具: - JDK (建议使用 8 及以上版本) - Maven - IDE (如 IntelliJ IDEA 或 Eclipse)

接下来,创建一个新的 Spring Boot 项目,使用 Spring Initializr(https://start.spring.io/)选择以下依赖: - Spring Web - Spring Security - Thymeleaf(用于视图层)

2. 项目目录结构

简单的项目结构可能如下所示:

src
 └── main
     ├── java
     │   └── com
     │       └── example
     │           └── demo
     │               ├── DemoApplication.java
     │               ├── SecurityConfig.java
     │               ├── WebController.java
     │               └── UserDetailsServiceImpl.java
     └── resources
         ├── templates
         │   ├── login.html
         │   └── home.html
         └── application.properties

3. 配置 Spring Security

首先,让我们创建一个基本的 Spring Security 配置类。

// SecurityConfig.java
package com.example.demo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 在内存中定义一个用户(用户名:user,密码:password,角色:USER)
        auth.inMemoryAuthentication()
            .withUser("user")
            .password("{noop}password")
            .roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/login").permitAll() // 登录页面允许所有人访问
            .anyRequest().authenticated() // 其他请求需要身份认证
            .and()
            .formLogin()
            .loginPage("/login") // 自定义登录页面
            . permitAll()
            .and()
            .logout()
            .permitAll();
    }
}

在上述代码中,我们指定了一个内存中的用户,并允许所有人访问登录页面。所有其他请求都需要用户登录才能访问。

4. 创建控制器

然后创建一个简单的控制器来处理请求。

// WebController.java
package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class WebController {

    @GetMapping("/login")
    public String login() {
        return "login"; // 返回登录视图
    }

    @GetMapping("/home")
    public String home(Model model) {
        model.addAttribute("message", "欢迎来到主页!");
        return "home"; // 返回主页视图
    }
}

5. 创建视图

接下来,在 src/main/resources/templates 目录下创建 login.htmlhome.html 两个文件。

login.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>登录</title>
</head>
<body>
    <h1>用户登录</h1>
    <form th:action="@{/login}" method="post">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username" /><br/>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password" /><br/>
        <button type="submit">登录</button>
    </form>
</body>
</html>

home.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>主页</title>
</head>
<body>
    <h1 th:text="${message}"></h1>
    <a href="/logout">注销</a>
</body>
</html>

6. 配置应用程序属性

最后,在 application.properties 文件中可以添加一些基本配置,例如:

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

7. 启动应用

现在可以启动应用程序。进入到 DemoApplication.java 文件,运行该类。应用启动后,访问 http://localhost:8080/login,输入用户名和密码(user/password)进行登录。

总结

通过以上步骤,我们成功实现了一个简单的 Spring Boot Web 登录认证系统。Spring Security 为我们处理了复杂的认证和授权逻辑,使得开发者可以专注于业务逻辑。这个例子可以作为更复杂应用的基础,当然在生产环境中,建议使用数据库来存储用户信息,并加强安全措施。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部