【问题标题】:what is the actual type of object parameter in vote method of spring security access decision voterspring安全访问决策投票者投票方法中对象参数的实际类型是什么
【发布时间】:2012-07-09 00:05:06
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: java spring-security


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我打印了这个对象,它告诉我它实际上是 FilterInvocation 对象。
    猜你喜欢
    • 2014-11-07
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多