当前位置: 首页 > article >正文

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) // 开启方法

http://www.kler.cn/a/410945.html

相关文章:

  • 15 go语言(golang) - 并发编程goroutine原理及数据安全
  • Linux -日志 | 线程池 | 线程安全 | 死锁
  • 自由学习记录(25)
  • 充满智慧的埃塞俄比亚狼
  • 图像分割——区域增长
  • AIGC--AIGC与人机协作:新的创作模式
  • ffmpeg RTP PS推流
  • ESC字符背后的故事(27 <> 033 | x1B ?)
  • 高性能 ArkUI 应用开发:复杂 UI 场景中的内存管理与 XML 优化
  • Android OpenGL ES详解——绘制圆角矩形
  • CGAL CGAL::Polygon_mesh_processing::self_intersections解析
  • AIGC与SEO:如何提升网站流量
  • 从零开始理解JVM:对象的生命周期之对象销毁(垃圾回收)
  • python学习笔记(12)算法(5)迭代与递归
  • 搜维尔科技:TechViz中的手指追踪:触摸并与虚拟物体互动
  • 排序算法2
  • 基于SSM的宠物领养平台
  • 【前端学习笔记】AJAX、axios、fetch、跨域
  • c++中数组的特点,vector容器的实现(增删改查各个接口的实现)
  • 【DVWA】File Inclusion文件包含实战