gpt4 book ai didi

java - Spring Security - UserRole 或 UserAuthentication

转载 作者:行者123 更新时间:2023-12-01 11:06:20 25 4
gpt4 key购买 nike

我正在尝试学习 Spring 安全性。

经过一些教程后,我发现其中一些使用 UserRole(s),而另一些则使用实现身份验证的 UserAuthentication 类。我尝试实现(并且有效)的是创建一个自定义 MyUserDetailsS​​ervice 来实现 UserDetailsS​​ervice,并授予权限(角色?),如下所示:

private List<GrantedAuthority> buildUserAuthority(Set<UserRole> userRoles) {
Set<GrantedAuthority> setAuths = new HashSet<GrantedAuthority>();

// Build user's authorities
for (UserRole userRole : userRoles) {
setAuths.add(new SimpleGrantedAuthority(userRole.getRole()));
}

List<GrantedAuthority> Result = new ArrayList<GrantedAuthority>(setAuths);

return Result;
}

我想知道用户角色和 GrantedAuthorities 之间有什么区别(例如使用 @PreAuthorize(hasRole...) 与 @PreAuthorize(hasAuthority...) 时),如果它们做同样的事情,为什么两者都存在?或者使用一种与另一种相比的优势。

最佳答案

关于您的评论“有些使用 UserRole,而另一些使用 UserAuthentication”,这实际上是两个不同的概念 - UserRole 用于用户授权,另一个用于用户身份验证。为什么使用一种而不是另一种只是实现一种对用户进行身份验证和授权的解决方案的各种情况的问题。身份验证用于确定用户是否是她所说的用户,而授权是用于确定她是否可以实际执行请求。我可能对你的教程有很大的误解,因为我还没有看过它,但我希望能帮助你理解其中提到的两个不同的概念,以及为什么它们是赞美概念而不是竞争概念。

关于您的实现方向,我认为您的自定义详细信息服务走在正确的轨道上,我过去已经做过无数次了,而且效果很好。关于您关于用户角色和 GrantedAuthority 的问题 - 我认为将 GrantedAuthority 视为一个抽象是安全的,允许您提供自定义字符串 token 来识别/分类某些用户/系统/等。在一组。这基本上也是一个 UserRole 吧?我不是 Spring 安全贡献者,但我的猜测是 GrantedAuthority 的创建是为了简单地抽象其安全域上下文中的角色概念。

通过将角色字符串放入 GrantedAuthority 中,您可以说经过身份验证的用户具有以下权限 - 角色。 @PreAuthorize 采用 EL 字符串,如果用户被“授予”,则该字符串可以与经过身份验证的用户的授予权限集合中的字符串之一匹配。如果用户没有被授予权限/角色,那么她就没有能力执行请求。对于您所问的问题,概念是相同的。

来自 Spring 文档:

 @PreAuthorize("hasRole('ROLE_USER')")
public void create(Contact contact);

此外,此页面很有帮助(请参阅:15.3 方法安全表达式): Spring Expressions

我希望这会有所帮助。

关于java - Spring Security - UserRole 或 UserAuthentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com