Los*_*can 3 java spring-security
我目前正在Spring中开发一个简单的基于角色的访问控制.我正在使用AccessDecisionVoter的实现.所以我想知道什么是Object o参数
public int vote(Authentication authentication, Object o, Collection<ConfigAttribute> configAttributes) {
Run Code Online (Sandbox Code Playgroud)
方法?Spring文档称它是"安全对象".我使用intercept-urls并且这个选民被调用,所以它是一个控制器吗?或者只是一串网址?
提前致谢.
如果您使用的是Spring Security 3.1 AccessDecisionVoter应该已经是通用的,<S>参数在投票方法中用作第二个参数.您可以浏览AccessDecisionVoter实现源代码(例如WebExpressionVoter,实现AccessDecisionVoter<FilterInvocation>)以理解该概念.其中一些实现使用Object作为通用参数,因为它们根本不需要使用安全对象(例如RoleVoter).
在您的情况下,您可能需要的是覆盖supports(Class<?>)方法(来自docs:它指示AccessDecisionVoter实现是否能够为指示的安全对象类型提供访问控制投票.)以获得FilterInvokation安全对象,如WebExpressionVoter:
@Override
public boolean supports(Class<?> clazz) {
return clazz.isAssignableFrom(FilterInvocation.class);
}
Run Code Online (Sandbox Code Playgroud)
然后你的投票实施可能是:
@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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |