Spring Boot 3 集成 Spring Security(2)
文章目录
-
- 授权
-
- 配置 SecurityFilterChain
- 基于注解的授权控制
- 自定义权限决策
在《Spring Boot 3 集成 Spring Security(1)》中,我们简单实现了 Spring Security 的认证功能,通过实现用户身份验证来确保系统的安全性。Spring Security的重要核心功能功能是“认证”和“授权”。接下来我们将深入了解授权机制,看如何控制用户在系统中可以访问的资源和操作。在 Spring Security 中,授权主要基于角色和权限的概念进行控制。
角色(Role):通常用来定义一组权限,用于定义用户身份的层级。比如 ADMIN(ROOT) 角色可能包含管理用户、查看日志等权限。
权限(Authority):具体的操作或资源访问权,则更细粒度地控制用户具体能做什么操作。比如 READ_PRIVILEGES、WRITE_PRIVILEGES 等。
Spring Security 提供了基于角色和权限的访问控制机制,使我们可以轻松管理系统中的授权逻辑。
授权
要实现授权,我们需要在 Spring Security 的配置类中定义用户的角色和访问策略。
代码实现过程:
- 定义两个用户分别赋予角色 admin -> ROOT、user -> USER
- 定义Controller 使用不同的用户登录访问接口 AdminController、UserController、SecuredController
- 登录不同账户验证授权
配置 SecurityFilterChain
package cn.harry.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
/**
* @author harry
*/
@Configuration
@EnableWebSecurity()
@EnableMethodSecurity(securedEnabled = true) // 开启方法