【问题标题】:Spring-security - AccessDecisionVoter-impl wont be invokedSpring-security - AccessDecisionVoter-impl 不会被调用
【发布时间】:2023-04-04 11:45:01
【问题描述】:


我正在尝试创建自定义 AccessDecisionVoter 并在它被调用时将其停止在调试中。

我在每种方法中都设置了一个断点,但没有发生任何事情。

spring-security.xml:

<bean id="accessDecisionManager" class="org.springframework.security.access.vote.UnanimousBased">
  <property name="decisionVoters">
     <list>
          <bean class="com.affiliates.server.security.voters.VoterTest">
              <property name="brandsApi"  ref="brandsApi"/>
          </bean>
        </list>
  </property>

IBrandsApi.java

    public interface IBrandsApi {

    IHibernateBean getByPK(Integer id);

    @Secured({ "ROLE_BRAND_ADMIN" })    
    IHibernateBean update(IHibernateBean brand);

    @Secured({ "ROLE_BRAND_ADMIN" })    
    IHibernateBean insert(IHibernateBean brand);

    @Secured({ "ROLE_BRAND_ADMIN" })    
    ResultContainer getAll(IFilter filter);

    @Secured({ "ROLE_ADMIN" })  
    Integer delete(IFilter filter); 
}

VoterTest.java(带断点的空文件)

    public class VoterTest implements AccessDecisionVoter {
private IBrandsApi brandsApi;

    public IBrandsApi getBrandsApi() {
        return brandsApi;
    }

    public void setBrandsApi(IBrandsApi brandsApi) {
        this.brandsApi = brandsApi;
    }

        @Override
        public boolean supports(ConfigAttribute attribute) {
            System.out.println("here");
            return false;

        }

        @Override
        public boolean supports(Class<?> clazz) {
            System.out.println("here");
            return false;
        }

        @Override
        public int vote(Authentication authentication, Object object,
                Collection<ConfigAttribute> attributes) {
            System.out.println("here");
            return 0;
        }
    }

顺便说一句,在应用加载/运行期间没有抛出异常 谢谢

【问题讨论】:

  • 你有 吗?
  • 是的,我可以使用注解和@Autowire spring beans,谢谢

标签: java spring-security voting


【解决方案1】:

您需要使用自定义的 AccessDecisionManager,否则使用默认的。你可以这样做

<global-method-security access-decision-manager-ref="accessDecisionManager"/>

查看the documentation 了解更多信息。

还有一件事:你的选民中的 supports() 方法可能应该返回 true 否则 vote() 将不会被调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2012-07-27
    • 2020-06-27
    • 2023-04-04
    • 2017-08-12
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多