我正在学习Spring Security,我对以下有关使用之间的区别有疑问@Secured注释和@RolesAllowed注解。
我知道两者都必须用于方法级别,在我的学习材料中我发现了以下2个例子:
-
@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
and @RolesAllowed
是相同的。他们在 Spring 中执行相同的操作。
But
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
or @RolesAllowed
or @PreAuthorize("hasRole('ROLE_USER')")
对于方法。
按照设计,最好将安全性放在服务层中。因此,当我保护服务操作时,我会检查角色,而不是用户。
这样,我们就可以通过称为角色的小型安全单元来关注业务逻辑和业务逻辑的安全性。
然后我将角色分配给用户。用户可以拥有多个角色。所以你必须看到这里的关系。用户被赋予角色。并且角色被授予对业务逻辑的访问权限。用户可以通过角色访问业务逻辑。这个概念称为基于角色的访问控制。
在复杂的情况下,我们还可以管理层级角色。一个角色有许多其他角色。但是在UserDetails中,我们必须扁平化角色层次结构并将角色列表提供给Spring框架来处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)