春季安全访问决策选民投票方法中对象参数的实际类型是什么

时间:2012-07-09 14:55:32

标签: java spring-security

我目前正在Spring中开发一个简单的基于角色的访问控制。我正在使用AccessDecisionVoter的实现。所以我想知道

中的Object o参数是什么
public int vote(Authentication authentication, Object o, Collection<ConfigAttribute> configAttributes) { 

方法? Spring文档称它是“安全对象”。我使用intercept-urls并且这个选民被调用,所以它是一个控制器吗?或者只是一串网址?

提前致谢。

1 个答案:

答案 0 :(得分:6)

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

在您的情况下,您可能需要覆盖supports(Class<?>)方法(来自docs:它指示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