我目前正在Spring中开发一个简单的基于角色的访问控制。我正在使用AccessDecisionVoter的实现。所以我想知道
中的Object o参数是什么public int vote(Authentication authentication, Object o, Collection<ConfigAttribute> configAttributes) {
方法? Spring文档称它是“安全对象”。我使用intercept-urls并且这个选民被调用,所以它是一个控制器吗?或者只是一串网址?
提前致谢。
答案 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