Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 boot PermissionEvaluator中的targetDomainObject始终为空_Spring Boot_Spring Security_Spring Data_Spring Data Rest_Spring El - Fatal编程技术网

Spring boot PermissionEvaluator中的targetDomainObject始终为空

Spring boot PermissionEvaluator中的targetDomainObject始终为空,spring-boot,spring-security,spring-data,spring-data-rest,spring-el,Spring Boot,Spring Security,Spring Data,Spring Data Rest,Spring El,我有一个来自Spring数据的CRUD存储库。我试图添加自定义权限评估,但在PermissionEvalutor的实现中,targetDomainObject始终为null 项目存储库 按照答案中关于使接口和实现参数名称匹配的建议,我尝试在表达式和方法参数中逐项更改实体。我不确定什么实现应该与这里的接口相匹配,所以我猜SimpleParepository应该与ItemRepository/Crudepository相匹配。无论如何,它不起作用,targetDomainObject总是空的。在另一

我有一个来自Spring数据的CRUD存储库。我试图添加自定义权限评估,但在PermissionEvalutor的实现中,targetDomainObject始终为null

项目存储库

按照答案中关于使接口和实现参数名称匹配的建议,我尝试在表达式和方法参数中逐项更改实体。我不确定什么实现应该与这里的接口相匹配,所以我猜SimpleParepository应该与ItemRepository/Crudepository相匹配。无论如何,它不起作用,targetDomainObject总是空的。在另一种方法中,targetId也是如此

调试MethodSecurityEvaluationContext.lookupVariable显示,在方法AddArgumentsVariables中,args.length=0,然后日志无法解析方法的方法参数名称:public abstract xx.xxx.Item xx.xxx.ItemRepository.savexx.xxx.Item。如果在表达式中使用参数名称,则需要调试符号信息。。在lookupVariable中,所有内容都为null


调试符号不是吗?我做错了什么?

没有查看实际的代码,但从您编写的调试信息判断,Spring无法找到参数名,可能是因为参数名来自接口,默认情况下字节码中不包含这些名称


尝试添加-parameters编译器标志。另请参见此答案,了解一个可能类似的问题:

那么,在参考问题接受答案中的建议之后,您发现了什么?您还可以检查MethodSecurityEvaluationContext.lookupVariable方法如何与调试器一起工作。@Jenschauder用调试信息编辑的问题就是它。谢谢,我快疯了
@PreAuthorize("hasRole('ROLE_USER')")
public interface ItemRepository extends CrudRepository<Item, Long> {
  @PreAuthorize("hasPermission(#entity, 'DELETE')")
  <S extends Item> S save(S entity);

  @PreAuthorize("hasRole('ROLE_ADMIN')")
  void delete(Long id);
}