有很多关于如何使用 jsp 标签、aop、注释、应用程序上下文以及所有这些东西的文档……但是我如何直接访问访问控制方法?我需要创建什么类(如果有)?我需要注意隐藏的 bean 吗? SecurityContextHolder
似乎不是正确的查找位置。
我想做的是这样的:
if(springSecurityObject.isAuthorized("hasAnyRole('DIRECTOR', 'ADMIN')")) {
// ... do something
}
或者更好:
if(springSecurityObject.hasAnyRole('DIRECTOR', 'ADMIN')) {
// ... do something
}
谢谢!
编辑:似乎 spring 安全人员正在对用户对象本身使用授予的权限:
我认为,如果他们提取出大量此类代码并将其放入一组不错的类中,这可能会有所帮助 - 标签库和实际用户都可以使用的东西。毕竟它们是私有(private)辅助方法...它们可能应该存在于某些类中的常见气味。
由于他们手动进行管道安装,我想我必须假设我想要的东西不存在。
最佳答案
我唯一能想到的是手动调用您的 UserDetailsService
,在返回的 Authentication
上调用 getAuthorities()
,然后调用 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 中会很好。
关于java - Spring Security - 我如何直接调用访问控制方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154601/