Java Spring安全性-如何要求直接调用访问控制方法?

Java Spring安全性-如何要求直接调用访问控制方法?,java,spring-security,authorization,Java,Spring Security,Authorization,有很多关于如何使用jsp标记、aop、注释、应用程序上下文以及所有这些类型的文档。。。但是如何直接访问访问控制方法呢?如果有的话,我需要创建什么类?有没有隐藏的豆子我需要注意?似乎SecurityContextHolder不是一个合适的地方 我想做的是这样的: if(springSecurityObject.isAuthorized("hasAnyRole('DIRECTOR', 'ADMIN')")) { // ... do something } 或者更好: if(springSe

有很多关于如何使用jsp标记、aop、注释、应用程序上下文以及所有这些类型的文档。。。但是如何直接访问访问控制方法呢?如果有的话,我需要创建什么类?有没有隐藏的豆子我需要注意?似乎
SecurityContextHolder
不是一个合适的地方

我想做的是这样的:

if(springSecurityObject.isAuthorized("hasAnyRole('DIRECTOR', 'ADMIN')")) {
    // ... do something
}
或者更好:

if(springSecurityObject.hasAnyRole('DIRECTOR', 'ADMIN')) {
    // ... do something
}
谢谢

编辑:似乎spring security人员正在对用户对象本身使用授予的权限:

我认为,如果他们将大量的代码抽象出来,并将其放入一组好的类中,这可能会有所帮助——这是标记库和实际用户都可以使用的。它们毕竟是私人助手方法。。。一种常见的气味,它们可能存在于某些类中


由于他们是手动操作管道,我想我必须假设我想要的东西不存在。

我唯一能想到的就是手动调用您的
UserDetailsService
,对返回的
Authentication
调用
getAuthorities()
,然后调用
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");
final UserDetails jimmydeails=myDetailsService.loadUserByUsername(“Jimmy”);
最终集合jimmyaauthorities=jimmydeails.getAuthorities();
//通过迭代和调用.getAuthority()使其成为集合
包含(“您需要检查的角色”);

编写自己的助手方法来实现这一点不会太难,尽管我同意在API中使用它们会很好。

是的,这就是我的想法。我自己也一直在这样做。我给你打勾,因为这似乎是唯一的答案。但这是一个遗憾,因为我强调的jsp标记中有很多代码可能在框架的许多地方进行了编码,并且可能应该放在一些标准类中,供框架和人们使用。只是错过了一个机会。