重学Spring Boot 3 - 集成Spring Security(三)

在前两篇文章中,我们已经初步认识了Spring Security以及如何在Spring Boot 3中进行基本的安全配置。在本篇文章中,我们将深入探讨如何实现用户认证和角色授权,以及一些常见的安全配置。

一、引入依赖

首先,确保你的pom.xml中添加了Spring Security的依赖。如果你还没有添加,可以通过以下代码来引入:

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

二、用户认证

我们将使用内存中存储用户数据的方式来进行用户认证。在实际项目中,通常会使用数据库存储用户信息。

代码示例

创建一个SecurityConfig类来实现用户认证:

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 {
        auth.inMemoryAuthentication()
            .withUser("user")
            .password("{noop}password") // {noop}表示不加密,实际项目中请使用加密
            .roles("USER")
            .and()
            .withUser("admin")
            .password("{noop}admin")
            .roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .antMatchers("/user/**").hasRole("USER")
            .antMatchers("/", "/home").permitAll()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }
}

在上面的配置中,我们定义了两个用户,分别是useradmin,并为他们设置了不同的角色。configure(HttpSecurity http)方法则配置了不同URL的访问权限。注意这里的password是使用{noop},表示密码不需要加密。生产环境建议使用BCrypt等安全方式进行密码加密。

三、编写控制器

接下来,我们需要创建一些控制器来处理请求。以下是一个简单的控制器示例:

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

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home"; // 返回主页
    }

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

    @GetMapping("/user")
    public String userPage(Model model) {
        model.addAttribute("message", "欢迎用户");
        return "user"; // 返回用户页面
    }

    @GetMapping("/admin")
    public String adminPage(Model model) {
        model.addAttribute("message", "欢迎管理员");
        return "admin"; // 返回管理员页面
    }
}

四、创建视图

src/main/resources/templates目录下,你可以创建home.htmllogin.htmluser.htmladmin.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">
    <div>
        <label for="username">用户名:</label>
        <input type="text" name="username" required />
    </div>
    <div>
        <label for="password">密码:</label>
        <input type="password" name="password" required />
    </div>
    <button type="submit">登录</button>
</form>
</body>
</html>

五、总结

以上内容展示了如何在Spring Boot 3中集成Spring Security,通过内存认证和角色授权实现简单的安全控制。对于更加复杂的需求,建议使用数据库来存储用户信息,并使用Spring Security的JWT、OAuth2等机制来增强安全性。希望通过这几篇文章的学习,能够帮助你更好地掌握Spring Security的使用,提升应用程序的安全性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部