targetDomainObject 在 PermissionEvaluator 中始终为 null
targetDomainObject is always null in PermissionEvaluator
我有一个来自 this example 的 Spring 数据的 CRUD 存储库。我正在尝试添加自定义权限评估,但在我的 PermissionEvalutor
实现中,targetDomainObject
始终是 null
.
ItemRepository
@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);
}
按照 this question 的答案中关于使接口和实现参数名称匹配的建议,我尝试在表达式和方法参数。我不确定什么实现应该匹配这里的什么接口,所以我猜是 SimpleJpaRepository
对 ItemRepository
/CrudRepository
。无论如何,它不起作用,targetDomainObject
始终为空。与另一种方法中的 targetId
相同。
调试 MethodSecurityEvaluationContext.lookupVariable
显示 args.length = 0
,在方法 addArgumentsAsVariables()
内,然后记录 Unable to resolve method parameter names for method: public abstract xx.xxx.Item xx.xxx.ItemRepository.save(xx.xxx.Item). Debug symbol information is required if you are using parameter names in expressions.
。在lookupVariable
,一切都是空的。
调试符号不是#
吗?我做错了什么?
没有查看实际代码,但从你写的调试信息来看,Spring 无法找到参数名称,可能是因为来自接口而那些不是'默认包含在字节码中。
尝试添加 -parameters
编译器标志。另请参阅此答案以了解可能类似的问题:
我有一个来自 this example 的 Spring 数据的 CRUD 存储库。我正在尝试添加自定义权限评估,但在我的 PermissionEvalutor
实现中,targetDomainObject
始终是 null
.
ItemRepository
@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);
}
按照 this question 的答案中关于使接口和实现参数名称匹配的建议,我尝试在表达式和方法参数。我不确定什么实现应该匹配这里的什么接口,所以我猜是 SimpleJpaRepository
对 ItemRepository
/CrudRepository
。无论如何,它不起作用,targetDomainObject
始终为空。与另一种方法中的 targetId
相同。
调试 MethodSecurityEvaluationContext.lookupVariable
显示 args.length = 0
,在方法 addArgumentsAsVariables()
内,然后记录 Unable to resolve method parameter names for method: public abstract xx.xxx.Item xx.xxx.ItemRepository.save(xx.xxx.Item). Debug symbol information is required if you are using parameter names in expressions.
。在lookupVariable
,一切都是空的。
调试符号不是#
吗?我做错了什么?
没有查看实际代码,但从你写的调试信息来看,Spring 无法找到参数名称,可能是因为来自接口而那些不是'默认包含在字节码中。
尝试添加 -parameters
编译器标志。另请参阅此答案以了解可能类似的问题: