プロジェクトで春のセキュリティ注釈を使用しています。注釈付きオブジェクトのセキュリティのないバージョンを呼び出したい場合があります。デフォルトでは、Spring は注釈付きオブジェクトのセキュリティ対応プロキシを作成し、それをコード内のオートワイヤリングに使用します。spring を使用してこれを実現する方法はありますか?
これを行う明白な方法は、この機能が必要な各クラスに対応するプロキシ クラスを手動で作成し、それらのメソッドに注釈を付け、これらのメソッドの実装で実際のオブジェクトに委任することです。
質問する
72 次
1 に答える
0
JDK プロキシの場合のオプションとして、実行時に実際の Bean を取得できます。
MyBean proxy;
if(AopUtils.isJdkDynamicProxy(proxy)) {
MyBean actualInstance = (MyBean) ((Advised)proxy).getTargetSource().getTarget()
}
actualInstance.doSomethingSecured(); // no advice related to this method will be called
// so your security annotation will be ignored (transactions, cache, and everething that requires AOP too...)
しかし、アーキテクチャの観点からは、手動プロキシを使用したアプローチはエラーの発生が少ないように見えます (ただし、セキュリティやその他の考えられるすべての側面が必要ないことが絶対に確実な場合を除きます)。
ジェネリックを使用して読みやすさを向上させることができます。
MyBean actualInstance = extractProxyTarget(proxy, proxy.getClass());
actualInstance.doSomethingSecured();
于 2013-03-13T10:22:42.120 に答える