gpt4 book ai didi

java - Spring 中 @Secured 与 @RolesAllowed 的区别?以及基于角色的安全性的概念?

转载 作者:IT老高 更新时间:2023-10-28 13:44:46 28 4
gpt4 key购买 nike

我正在研究Spring Security,对于@Secured注解和@RolesAllowed注解的使用区别有以下疑惑。

我知道两者都必须在方法级别使用,在我的学习资料中我发现了以下两个示例:

  • @RolesAllowed 注释:

    import javax.annotation.security.RolesAllowed;    
    public class ItemManager {
    @RolesAllowed("ROLE_MEMBER")
    public Item findItem(long itemNumber) {
    ...
    }
    }
  • @Secured 注释:

    import org.springframework.security.annotation.Secured;
    public class ItemManager {
    @Secured("ROLE_MEMBER")
    public Item findItem(long itemNumber) {
    ...
    }
    }

在我看来,这两个注释的工作方式相同。有什么区别?我错过了什么?

我的另一个疑问是:ROLE_MEMBER 究竟代表什么?

我认为这类似于基于角色的安全性,因此它可能意味着:只有当用户是成员时,它才能访问注释资源(这是对的吗?)。但是在哪里以及如何定义用户设置了这个角色(它是一个成员)的事实?具体是如何工作的?

Tnx

最佳答案

@Secured@RolesAllowed 是一样的。他们在 Spring 中执行相同的操作。

但是

  • @RolesAllowed - Java 的标准注解。

    Java 已经定义了 Java Specification Request,基本上是对 Java 语言、库和其他组件的更改请求。对于注解的开发,他们提供了 JSR 250。@RolesAllowed 包含在其中。 This link contains further info in JSR 250

  • @Secured - Spring 安全注解

ROLE_MEMBER 是设置为安全用户详细信息的角色。

请引用我当前项目中的这个示例。在这里,我使用用户数据对象并将赋予用户的角色映射到安全用户详细信息。

public class CustomUserDetails implements UserDetails {
...
...
...

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
for (Role role : this.user.getRoles()){
grantedAuthorities.add(new SimpleGrantedAuthority(role.getRole()));
}
return grantedAuthorities;
}
}

然后使用 @Secured@RolesAllowed@PreAuthorize("hasRole('ROLE_USER')") 用于方法。

按照设计,将安全性放在服务层是很好的。因此,当我保护我的服务操作时,我会检查角色,而不是用户。

这样,我们可以通过称为角色的小型安全单元专注于业务逻辑和业务逻辑的安全性。

然后我将角色分配给用户。用户可以有多个角色。所以你必须看到这里的关系。用户被赋予角色。并且角色可以访问业务逻辑。用户可以通过角色访问业务逻辑。这个概念称为基于角色的访问控制。

在复杂的情况下,我们还可以管理分层角色。一个角色有许多其他角色。但是在 UserDetails 中,我们必须将角色层次结构扁平化,并将角色列表提供给 Spring 框架进行处理。

关于java - Spring 中 @Secured 与 @RolesAllowed 的区别?以及基于角色的安全性的概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29434765/

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