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

Spring Security Granted Authority(授予权限)

Spring Security 是一个全面的框架,用于保护基于 Spring 的应用程序。它引入了一种强大的权限处理模型,即 Granted Authority。本文将探讨什么是 Granted Authority,它在 Spring Security 中的作用,以及如何通过实际示例有效地实现和利用它。

理解 Granted Authority

Granted Authority 表示授予已认证用户执行特定操作的权限或权利。它是 Spring Security 授权机制的核心组件,支持基于用户分配的角色或权限进行细粒度的访问控制。

Granted Authority 的作用

  • 基于权限的访问控制:Granted Authorities 可以用于根据用户的权限限制对应用程序各个部分的访问。
  • 灵活性和可扩展性:Authorities 可以表示角色(如 ROLE_USERROLE_ADMIN)或更细粒度的权限(如 READ_PRIVILEGESWRITE_PRIVILEGES),提供灵活建模复杂安全需求的能力。

实现 Granted Authority

实现 Granted Authority 涉及定义权限或角色,将它们分配给用户,并根据这些权限强制执行访问控制。以下是一些示例,展示了这些步骤的实现。

示例 1:在 UserDetailsService 中定义 Authorities

在实现 UserDetailsService 时,定义每个用户被授予的权限。这是将用户与其角色或权限关联起来的关键步骤。

@Service
public class CustomUserDetailsService implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 从数据库中获取用户和角色
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        
        List<GrantedAuthority> authorities = user.getRoles().stream()
            .map(role -> new SimpleGrantedAuthority(role.getName()))
            .collect(Collectors.toList());

        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);
    }
}

此示例从数据库中获取用户及其角色,并将每个角色转换为 GrantedAuthority

示例 2:使用 Authorities 配置方法安全

Spring Security 允许使用 @PreAuthorize 注解来保护服务方法,其中可以指定方法访问所需的权限。

@RestController
@RequestMapping("/api/")
public class AdminController {

    @PreAuthorize("hasRole('ADMIN')")
    @GetMapping("/admin")
    public ResponseEntity<String> helloAdmin() {
        return ResponseEntity.ok("Hello Admin");
    }

    @PreAuthorize("hasRole('USER')")
    @GetMapping("/user")
    public ResponseEntity<String> helloUser() {
        return ResponseEntity.ok("Hello User");
    }
}
  • @PreAuthorize("hasRole('ADMIN')"):应用于 helloAdmin() 方法,指定该端点只能由具有 ADMIN 角色的用户访问。
  • @PreAuthorize("hasRole('USER')"):应用于 helloUser() 方法,限制访问仅限于具有 USER 角色的用户。Spring Security 在允许访问方法之前会强制执行角色检查。

使用 @PreAuthorize 注解在 Spring Boot REST API 中提供了一种强大且灵活的管理方法级访问控制的方式。它允许在受保护资源的上下文中直接进行清晰且可维护的安全配置。

示例 3:使用 Authorities 保护 Web 端点

您还可以使用 Authorities 限制对特定 Web 路径或端点的访问。

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf(csrf -> csrf.disable())
            .authorizeHttpRequests(authorize -> authorize
                .requestMatchers("/admin/**").hasAuthority("ROLE_ADMIN")
                .requestMatchers("/user/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")
                .requestMatchers("/public/**").permitAll()
                .anyRequest().authenticated())
            .httpBasic(Customizer.withDefaults());

        return http.build();
    }
}

此配置限制 /admin/** 路径仅对具有 ROLE_ADMIN 权限的用户开放,而 /user/** 路径对具有 ROLE_USERROLE_ADMIN 权限的用户开放。

结论

Spring Security 中的 Granted Authority 提供了一种强大且灵活的机制,用于管理用户权限并保护您的应用程序。

通过理解如何定义、分配和强制执行权限,开发人员可以实现符合应用需求的全面安全模型。

无论是在方法、端点还是应用内的特定操作上限制访问,利用 Granted Authorities 都能帮助您维护一个安全、基于权限的访问控制系统,随着应用的复杂性和增长而扩展。


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

相关文章:

  • SAP PI/PO Proxy2JDBC SQL_QUERY动态接口示例
  • 低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试
  • HarmonyOs鸿蒙开发实战(17)=>沉浸式效果第二种方案一组件安全区方案
  • 基于SpringBoot的“网上书城管理系统”的设计与实现(源码+数据库+文档+PPT)
  • ElasticSearch7.x入门教程之中文分词器 IK(二)
  • 基于web的音乐网站(Java+SpringBoot+Mysql)
  • Android7点开语言直接显示语言偏好设置
  • pycharm调试transformers(hugging face)的模型
  • day03(单片机高级)RTOS
  • el-table根据指定字段合并行和列+根据屏幕高度实时设置el-table的高度
  • async在js中是强制同步的意思吗
  • 无人机的激光雷达避障系统阐述!
  • vmware虚拟机给创建的centos扩展磁盘步骤
  • 【MySQL实战45讲笔记】基础篇——深入浅出索引(上)
  • 利用代理IP爬取Zillow房产数据
  • 实时多模态 AI 的 N 种新可能丨实时互动和大模型专场@RTE2024回顾
  • C++学习——编译的过程
  • 【软考】系统架构设计师-信息系统基础
  • 1.1 爬虫的一些知识(大模型提供语料)
  • 渗透测试学习笔记—shodan(1)
  • Flink错误:一historyserver无法启动,二存在的文件会报错没有那个文件或目录
  • 乐鑫芯片模组物联网方案,智能设备升级新选择,启明云端乐鑫代理商
  • 2024亚太杯数学建模C题【Development Analyses and Strategies for Pet Industry 】思路详解
  • 面向未来的智能视觉参考设计与汽车架构,思尔芯提供基于Arm技术的创新方案
  • Android Studio2024版本安装环境SDK、Gradle配置
  • 【Node.js】全面解析 Node.js 安全最佳实践:保护您的应用