Spring Security自定义PermissionEvaluator配置无法正常工作
我的自定义Spring Security PermissionEvaluator有问题。所以 CustomPermissionEvaluator需要该服务来完成其工作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;
@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
,则它不起作用