스프링 데이터의 this example에서 CRUD 저장소가 있습니다. 사용자 정의 권한 평가를 추가하려고하지만 PermissionEvalutor
의 구현에서 targetDomainObject
은 항상 null
입니다. 일치하는 인터페이스와 구현 매개 변수 이름을 만드는 this question에 대한 답변의 제안에 따라 ItemRepositorytargetDomainObject는 PermissionEvaluator에서 항상 null입니다.
@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);
}
는, 나는 표현과 방법 매개 변수를 모두 item
에 의해 entity
을 변경 시도했습니다. 무슨 구현이 여기에 어떤 인터페이스와 일치해야하는지 모르겠다. 그래서 나는 SimpleJpaRepository
을 ItemRepository
/CrudRepository
에 대해 추측하고있다. 어쨌든, 작동하지 않습니다. targetDomainObject
은 항상 null입니다. 다른 방법에서는 targetId
과 동일합니다.
디버깅 MethodSecurityEvaluationContext.lookupVariable
은 addArgumentsAsVariables()
내부에 args.length = 0
이라는 메시지를 표시 한 다음 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
에 모든 것이 null입니다.
디버그 기호가 #
이 아닌가? 내가 도대체 뭘 잘못하고있는 겁니까?
참조 된 질문의 답변을 수락 할 때 뭘 찾았습니까? "'MethodSecurityEvaluationContext.lookupVariable' 메소드가 디버거와 작동하는 방법을 확인할 수도 있습니다." –
@JensSchauder 디버그 정보로 편집 된 질문 – garci560