私はSpringデータのthis exampleからCRUDリポジトリを持っています。カスタム許可の評価を追加しようとしていますが、PermissionEvalutor
の実装では、targetDomainObject
は常にnull
です。targetDomainObjectは常にPermissionEvaluatorで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への回答で提案した後、私が表現し、メソッドのパラメータの両方に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