如果您使用的是 Spring Security 3.1AccessDecisionVoter
应该已经是通用的,<S>
参数用作投票方法中的第二个参数。您可以浏览 AccessDecisionVoter 实现源代码(例如WebExpressionVoter
which 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