0

私は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への回答で提案した後、私が表現し、メソッドのパラメータの両方にitementityを変更しようとしました。どんな実装がここのインターフェイスと一致するかわからないので、私は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です。

デバッグシンボルは#ではありませんか?私は間違って何をしていますか?

+0

参照された質問の回答を受け入れると、何が見つかりましたか? "' MethodSecurityEvaluationContext.lookupVariable'メソッドがどのようにデバッガと連携しているかをチェックすることもできます。 " –

+0

@ JensSchauderデバッグ情報で編集した質問 – garci560

答えて

1

実際のコードを見ていないのですが、デバッグ情報について書いていることから、Springはパラメータ名を見つけることができません。これはおそらくインタフェースから来たものであり、バイトコードには含まれていないからですデフォルトでは

-parametersコンパイラフラグを追加してみてください。おそらく同様の問題については、この回答も参照してください。https://stackoverflow.com/a/40787280

+0

それはそれでした。ありがとう、私は夢中になっていた – garci560

関連する問題