在 Spring Boot 3 中实现基于角色的访问控制

基于角色的访问控制 (RBAC) 是一种有价值的访问控制模型,可增强安全性、简化访问管理并提高效率。它在管理资源访问对安全和运营至关重要的复杂环境中尤其有益。

我们将做什么

我们有一个包含公共路由和受限路由的 Web API。受限路由需要数据库中用户的有效 JWT。

现在用户已经通过身份验证,我们希望更进一步,只有当用户具有特定角色时才允许访问某些数据。

我们的系统中有以下角色:

  • 用户:可以访问他的信息
  • 管理员:可以执行用户角色所做的所有操作并访问用户列表。
  • 超级管理员:可以执行管理员角色所做的所有操作,并可以创建管理员用户;简而言之,他可以做所有事情。

以下是受保护路由列表以及访问它们所需的角色

Route [ GET] /users/me
角色:用户、管理员、超级管理员
描述:检索经过身份验证的用户。

Route [GET] /users
角色:管理员、超级管理员
描述:检索所有用户的列表。

Route [POST] /admins
角色:超级管理员
描述:创建管理员。

前提条件:

要遵循本教程,请确保您的计算机上安装了以下工具。

  • JDK 11 或更高版本
  • Maven 3.8 或更高版本 
  • Docker

我们需要 Docker 来运行 MySQL 8 的容器;如果你的计算机上安装了 MySQL,则可以跳过它。运行以下命令从MySQL 映像启动 Docker 容器: 

docker run -d -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=taskdb --name mysqldb -p 3307:3306 mysql:8.0

让我们使用以下 cURL 请求来注册一个用户。

我们得到以下输出。

我们可以看到一切都按预期进行;让我们继续!

创建角色实体

角色实体将代表我们系统中所需的不同角色。我们将创建一个枚举来表示所有可能的角色名称。

在“entities”包中,创建文件“RoleEnum.java”并添加以下代码:

package com.tericcabrel.authapi.entities;

public enum RoleEnum {
    USER,
    ADMIN,
    SUPER_ADMIN
}

在“entities”包中,创建一个文件“Role.java”并添加以下代码:

package com.tericcabrel.authapi.entities;

import jakarta.persistence.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import java.util.Date;

@Table(name = "roles")
@Entity
public class Role {
    @Id
    &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值