java - Spring Security - 我如何直接调用访问控制方法?

标签 java spring-security authorization

有很多关于如何使用 jsp 标签、aop、注释、应用程序上下文以及所有这些东西的文档……但是我如何直接访问访问控制方法?我需要创建什么类(如果有)?我需要注意隐藏的 bean 吗? SecurityContextHolder 似乎不是正确的查找位置。

我想做的是这样的:

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

或者更好:

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

谢谢!

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

https://fisheye.springsource.org/browse/spring-security/taglibs/src/main/java/org/springframework/security/taglibs/authz/AbstractAuthorizeTag.java?r=fc399af136492c6c37cdddca6d44e5fe57f69680

我认为,如果他们提取出大量此类代码并将其放入一组不错的类中,这可能会有所帮助 - 标签库和实际用户都可以使用的东西。毕竟它们是私有(private)辅助方法...它们可能应该存在于某些类中的常见气味。

由于他们手动进行管道安装,我想我必须假设我想要的东西不存在。

最佳答案

我唯一能想到的是手动调用您的 UserDetailsS​​ervice,在返回的 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/

相关文章:

java - String.valueOf() 的实习

authentication - Play Framework 句柄授权而不是身份验证

java - 如何仅从 for 循环打印一次语句 - Java

java - Android:ScrollView 禁用所有按钮和导航

java - (javafx)我目前正在制作一个需要人们创建帐户的应用程序,我如何确保文本字段不为空?

java - Spring security - 指定顺序时多个 httpsecurity 不起作用

java - 当存在某些类时,Eclipse Luna 内容帮助不起作用

java - 有没有办法使用 Spring Security 检查 PHP 创建的 bcrypt 哈希值?

ruby-on-rails - 使用 cancan 和 devise 授权 Rails 中未登录的用户行为

asp.net-mvc - 如何使用 ASP.NET MVC 将某些 HTML 元素限制为某些角色?