@PreAuthorize安全角色注释

时间:2013-09-30 11:59:51

标签: java spring spring-security spring-mvc-test

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

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

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

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

感谢, 射线。

1 个答案:

答案 0 :(得分:4)

这些角色是您在用户登录时分配给UserDetails的角色(权限)。这些角色将由Authentication实施返回。

它们是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();

其中getAuthentication()返回我上面链接的身份验证实例,然后从该对象中获取权限。