3

我目前正在 Spring 中研究基于角色的简单访问控制。我正在使用 AccessDecisionVoter 的实现。所以我想知道 Object o 中的参数是什么

public int vote(Authentication authentication, Object o, Collection<ConfigAttribute> configAttributes) { 

方法?Spring 文档说它是“安全对象”。我使用intercept-urls 并且这个投票者被调用,那么它是一个控制器吗?或者它只是一个网址字符串?

提前致谢。

4

1 回答 1

7

如果您使用的是 Spring Security 3.1AccessDecisionVoter应该已经是通用的,<S>参数用作投票方法中的第二个参数。您可以浏览 AccessDecisionVoter 实现源代码(例如WebExpressionVoterwhich implements AccessDecisionVoter<FilterInvocation>)以了解该概念。其中一些实现使用 Object 作为通用参数,因为它们根本不需要使用安全对象(例如RoleVoter)。

在您的情况下,您可能需要的是覆盖supports(Class<?>)方法(来自文档:它指示 AccessDecisionVoter 实现是否能够为指示的安全对象类型提供访问控制投票。)以获得FilterInvokation安全对象,如下所示WebExpressionVoter

@Override
public boolean supports(Class<?> clazz) {
    return clazz.isAssignableFrom(FilterInvocation.class);
}

然后您的投票实施可能是:

@Override
public int vote(Authentication authentication, FilterInvocation fi,
    Collection<ConfigAttribute> attributes) {
  String url = fi.getRequestUrl();
  // rest of code, you can also fetch request / response from fi
于 2012-07-09T20:34:47.483 回答