【问题标题】:Spring Security custom PermissionEvaluator configurations does not work properlySpring Security 自定义 PermissionEvaluator 配置无法正常工作
【发布时间】:2015-03-24 05:28:55
【问题描述】:

我的自定义 Spring Security PermissionEvaluator 有问题。所以, CustomPermissionEvaluator 需要该服务来完成其工作。

@Service
public class MyService {
  // methods....
}

这是评估器本身。

public class CustomPermissionEvaluator implements PermissionEvaluator {

   private MyService service;

   public CustromPermissionEvaluator( MyService service ) {
     this.service = service;
   }

   // hasPermission methods... 


}

这里是配置

@Configuration
@EnableGlobalMethodSecurity( prePostEnabled = true )
public class MethodSecurityConfiguration extends GlobalMethodSecurityConfiguration  {

  @Autowired
  private MyService service;

  @Override
  protected MethodSecurityExpressionHandler createExpressionHandler() {

    CustomPermissionEvaluator permissionEvaluator = new CustomPermissionEvaluator( service );

    DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
    expressionHandler.setPermissionEvaluator( permissionEvaluator );

    return expressionHandler;

  }

}

因此,当应该调用 @PreAuthorize("hasPermission( ... )" ) 时,什么也没有发生。但是,当我将该依赖项直接放在 CustomPermissionEvaluator 的构造函数中时,没有 ApplicationContext 和自动装配,一切都很完美。我已将服务对象打印到日志文件中,并且它不为空。那么,有什么问题呢?

【问题讨论】:

    标签: spring security configuration autowired access-control


    【解决方案1】:

    我遇到了同样的问题,不得不使用@Lazy 注释:

    @Lazy @Autowired
    private MyService service;
    

    似乎安全性内容在 Spring 配置的其余部分之前被引导。我猜@Lazy 允许注入引用,但在使用之前不会真正解析。

    【讨论】:

      【解决方案2】:

      花了几个小时后,这是唯一对我有用的解决方案。谢谢@hvgotcodes。

      所以我所做的是 使用 @component 注释 CustomPermissionEvaluator。 并使用 @Lazy @Autowired 注释 MyService

      @Component
      Class CustomPermissionEvaluator {
          @Lazy @Autowired
          private MyService service;
      }
      

      如果我在配置 MethodSecurityConfiguration 中使用 @Lazy @Autowired 则它不起作用

      【讨论】:

        猜你喜欢
        • 2020-09-24
        • 2018-10-29
        • 2017-04-29
        • 2020-02-09
        • 2021-09-20
        • 2013-05-06
        • 2017-03-05
        • 2020-09-05
        • 1970-01-01
        相关资源
        最近更新 更多