我试图了解一些Spring安全代码。我也是Spring Security的新手,我想我在这里缺少一些基本的东西。
我在其中一个类上有这个注释:
@Controller
@RequestMapping("/download-resource")
@PreAuthorize(value="hasRole('LINKS_ADMIN')")
public class DownloadResourcesController extends BaseHtmlController
{..}
我读到了@PreAuthorize
及其逻辑。
我仍然无法理解Spring安全性从哪里检索定义的角色字符串:'LINKS_ADMIN'
。在哪里定义?
感谢, 射线。
答案 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()
返回我上面链接的身份验证实例,然后从该对象中获取权限。