1

我正在尝试了解一些 Spring 安全代码。我也是 Spring Security 的新手,我想我在这里缺少一些基本的东西。

我在其中一个类上有这个注释:

@Controller
@RequestMapping("/download-resource")
@PreAuthorize(value="hasRole('LINKS_ADMIN')")
public class DownloadResourcesController extends BaseHtmlController 
 {..}

我读到了@PreAuthorize它的逻辑。我仍然无法理解 Spring 安全性从哪里检索定义的角色字符串:'LINKS_ADMIN'。它在哪里定义?

谢谢,雷。

4

1 回答 1

4

这些角色是您在用户登录时分配给UserDetails的角色(权限) 。这些将由身份验证实现返回。

它们是一种形式Collection<? extends GrantedAuthority>,通常SimpleGrantedAuthority被使用。

例如,在我的应用程序中,每个人都被分配到组。因此,当用户登录时,我会检查该用户所属的所有组并将这些组添加到他的用户详细信息中。

    for (Group group : groups) {
        grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_" + group.getName().toUpperCase()));
    }

因此,如果我有名为“Admin”、“User”和“Reporter”的组,我现在可以检查has_role('ROLE_ADMIN'),has_role('ROLE_USER')has_role('ROLE_REPORTER')

 

在引擎盖下它是从

SecurityContextHolder.getContext().getAuthentication().getAuthorities();

wheregetAuthentication()返回我在上面链接到的 Authentication 实例,然后您从该对象中获取权限。

于 2013-09-30T12:20:27.340 回答