【发布时间】:2017-10-11 01:27:49
【问题描述】:
我有一个来自 Spring Data 的this example 的 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 的答案中关于使接口和实现参数名称匹配的建议,我尝试在表达式和方法参数中将entity 更改为item。我不确定什么实现应该与这里的接口匹配,所以我猜是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,一切都是空的。
调试符号不是#吗?我做错了什么?
【问题讨论】:
-
那么,当您按照参考问题接受的答案中的建议进行操作时,您发现了什么? "您还可以检查
MethodSecurityEvaluationContext.lookupVariable方法如何与调试器一起使用。" -
@JensSchauder 使用调试信息编辑问题
标签: spring-boot spring-security spring-data spring-data-rest spring-el