繁体   English   中英

spring 引导中基于角色的授权

[英]Role based authorization in spring boot

我是 Spring 引导的新手。 我需要在 spring 引导中实现基于角色的授权。 我有不同的角色,多个用户将被映射到每个角色。 我将设置不同的访问权限(读取、添加、删除、编辑) 每当调用 api 时,需要检查访问权限并允许权限。 我打算使用拦截器来调用具有查询的方法以从数据库获取访问权限并拒绝或访问 api。 还有其他更好的方法我可以使用吗?

如果您使用的是 Spring 安全性,您可以使用@PreAuthorize@PostAuthorize等方法安全性注释来处理它,甚至可以将它们组合到新的注释中。

首先您的用户需要实现 UserDetails 然后您应该根据您的角色和权限结构 Spring 实现getAuthorities()方法 安全性基本上检查 getAuthority() 方法返回的内容,如果返回值以"ROLE_"为前缀,如"ROLE_ADMIN" ,它将被处理为 ROLE如果它没有以“ROLE_”为前缀,它将被处理为权限,您可以使用方法注释来检查权限和角色,如下例所示:

@PreAuthorize("hasRole('ROLE_ADMIN') and hasAuthority("READ")") 

Spring Security将通过getAuthorities()您的用户实现检查您授予的权限,然后根据您的注释,Spring Security 将代表您自动检查。

为了清楚起见,您可以查看https://www.baeldung.com/spring-security-granted-authority-vs-role

为了快速实施,您可以查看下面的文章(我不会直接使用它,但您可以理解这个想法。您也可以使用权限,但简单的解决方案可能是下面的解决方案。):

https://www.baeldung.com/role-and-privilege-for-spring-security-registration

对于授权,也可以有以下两种方式:

  1. OAuth(参考 - https://medium.com/@bvulaj/mapping-your-users-and-roles-with-spring-boot-oauth2-a7ac3bbe8e7f
  2. Spring 安全角色和权限(参考- https://www.baeldung.com/role-and-privilege-for-spring-security-registration

您可以创建自定义注释来处理每个角色的请求。 我可以阅读这篇文章以获取有关如何实现的更多详细信息。

在 api 中将具有以下格式:

@GetMapping(...)
@YouCustomAnnotation("roleName")
public void doSomeThing(){
}

如果用户的角色与注释中定义的角色匹配,则将调用此 api,如果用户的角色不匹配,服务器将返回 404 代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM