Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Security自定义PermissionEvaluator配置无法正常工作_Spring_Security_Configuration_Autowired_Access Control - Fatal编程技术网

Spring Security自定义PermissionEvaluator配置无法正常工作

Spring Security自定义PermissionEvaluator配置无法正常工作,spring,security,configuration,autowired,access-control,Spring,Security,Configuration,Autowired,Access Control,我的自定义Spring Security PermissionEvaluator有问题。所以 CustomPermissionEvaluator需要该服务来完成其工作 @Service public class MyService { // methods.... } 这是评估者本身 public class CustomPermissionEvaluator implements PermissionEvaluator { private MyService service;

我的自定义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和自动连接时,一切工作都很完美。我已将服务对象打印到日志文件中,它不为null。那么,怎么了

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

@Lazy @Autowired
private MyService service;

看起来安全性的东西在Spring配置的其余部分之前就已经启动了。我猜
@Lazy
允许注入引用,但在使用之前不会真正解析引用。

花费数小时后,这是唯一适合我的解决方案。谢谢@hvgotcodes

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

@Component
Class CustomPermissionEvaluator {
    @Lazy @Autowired
    private MyService service;
}
如果我在configuration MethodSecurityConfiguration中使用了
@Lazy@Autowired
,则它不起作用