我对春靴很陌生。我需要在spring引导中实现基于角色的授权。我有不同的角色,多个用户将映射到每个角色。每当调用api时,我将设置不同的访问(读取、添加、删除、编辑),需要检查访问权限和允许权限。我计划使用拦截器调用方法,让查询从DB获得访问权,并拒绝或访问api。还有其他更好的方法可以用来做同样的事情吗?
发布于 2021-05-12 13:33:13
如果您正在使用Security,您可以使用方法安全注释(如@PreAuthorize、@PostAuthorize )来处理它。甚至将它们合并到新的注释中。
首先,您的用户需要实现UserDetails,然后您应该根据您的角色和权限结构实现getAuthorities()方法-- Security基本上检查getAuthority()方法返回的是什么,如果返回的值以"ROLE_" (如"ROLE_ADMIN" )作为前缀,则将作为角色处理,如果它没有以"ROLE_“作为前缀,它将作为权限进行处理,您可以使用方法注释来检查权限和角色,如下例所示:
@PreAuthorize("hasRole('ROLE_ADMIN') and hasAuthority("READ")") Security将通过用户的getAuthorities()实现来检查您的授权,然后根据您的注释,它将由Security 代表您自动检查。
为了清晰起见,您可以检查https://www.baeldung.com/spring-security-granted-authority-vs-role
为了快速实现,您可以查看下面的文章(我不会直接使用它,但您可以理解这个想法。此外,您还可以使用权限,但简单的解决方案可能是下面的解决方案。):
https://www.baeldung.com/role-and-privilege-for-spring-security-registration
发布于 2021-05-12 12:58:39
对于授权,也可以有以下两种方式:
发布于 2021-05-12 16:03:10
您可以创建一个自定义注释来处理每个角色的请求。关于如何实现的更多细节,我可以阅读这个文章。
在api中将有格式:
@GetMapping(...)
@YouCustomAnnotation("roleName")
public void doSomeThing(){
}如果用户的角色与注释中的角色定义相匹配,则调用此api;如果用户的角色不匹配,服务器将返回404代码。
https://stackoverflow.com/questions/67504020
复制相似问题