有很多关于如何使用jsp标签,aop,注释,应用程序上下文以及所有这些内容的文档......但是如何直接访问访问控制方法?如果有的话,我需要创建哪个类?我需要注意隐藏的豆子吗? SecurityContextHolder
似乎不适合观看。
我想做的是这样的事情:
if(springSecurityObject.isAuthorized("hasAnyRole('DIRECTOR', 'ADMIN')")) {
// ... do something
}
甚至更好:
if(springSecurityObject.hasAnyRole('DIRECTOR', 'ADMIN')) {
// ... do something
}
谢谢!
编辑:看起来Spring安全人员正在使用用户对象本身的授权权限:
我认为,如果他们抽出大量的代码并将其放入一组很好的类中,这可能会有所帮助 - 这是标记库和实际用户都可以使用的。毕竟它们是私人助手方法......一种常见的气味,它们可能应该存在于某些类中。
由于他们手动进行管道工作,我想我必须假设我想要的东西不存在。
答案 0 :(得分:2)
我唯一能想到的是手动调用UserDetailsService
,在返回的getAuthorities()
上调用Authentication
,然后调用contains()
或containsAll()
返回集合。
所以你有类似的东西:
final UserDetails jimmyDetails = myDetailsService.loadUserByUsername("Jimmy");
final Collection<GrantedAuthority> jimmyAuthorities = jimmyDetails.getAuthorities();
// make it a Collection<String> by iterating and calling .getAuthority()
plainAuthorities.contains("ROLE_YOU_NEED_TO_CHECK_FOR");
编写自己的辅助方法可以做到这一点并不会太难,尽管我同意在API中使用它们会很好。