私のカスタム認証プロバイダでは、サービスAPIを使用してドメインオブジェクトを取得できましたが、あるドメインオブジェクトから別のドメインオブジェクトにクロールして、トランザクションを持つSpringセキュリティカスタム認証プロバイダをラップする
domain.getAnotherDomain().getProperty(); // epic FAIL
私はトランザクションにすべての私のプロジェクトのAPIをラップするために、次のAOPのトランザクションを持っている、と私は私のカスタム認証プロバイダは、次のパターンに陥るかなり確信している: - - :
Hibernateセッションが存在しない文句を言い<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor pointcut="execution(* my.project..*.*(..))" advice-ref="txAdvice" />
</aop:config>
OpenSessionInViewフィルタも設定しましたが、とにかくSpring Securityには当てはまりません。
私は、すべての必要なチェックを実行するための特定のサービスAPIを作成することができますが、私は私のカスタム認証プロバイダを適切なトランザクションでラップできないのが不思議です。
説明はありますか?ありがとう。
例外メッセージは、「ss.domainロールのコレクションを遅延して初期化できませんでした。セッションまたはセッションが閉じられませんでした。私は、絶対的な必要がない限り、eager fetchingを実行しない方がいいです...つまり、カスタム認証プロバイダクラスをラップするトランザクションを取得した場合です。 – limc
もし、 'domain'をあるセッションに読み込むと、別のセッションで' domain'から 'anotherDomain'を遅延ロードすることができなくなります。私はこれがあなたのケースであるかどうかはわかりませんが(あなたの質問から私には分かりません)。しかし、常にEagerの読み込みをしたくない場合は、Fetch Profilesを使用することを検討することもできますが、時には必要があることを知っています。 – jpkrohling