0
@In
Identity identity;

Boolean newValue = identity.hasPermission(target, action);

上記のメソッドを呼び出すと、基盤となるシームエンジンから呼び出される「ロールrからロールを選択」呼び出しも実行されます。この呼び出しのクエリキャッシュをクエリヒント(org.hibernate.cacheableフラグなど)として設定して、再度呼び出されないようにするにはどうすればよいですか。

注:ロール情報が変更されることは決してないため、これを不要なSQL呼び出しと見なします。

4

1 に答える 1

0

私は休止状態ではありませんが、この質問にはまだ回答がないため、いくつかの理由で標準のIdentityクラスのseamを拡張しました。結果をキャッシュするのに役立つように、これも拡張することをお勧めします。

このキャッシュはセッションスコープであるため、ユーザーが再度ログオン/ログオフしたときにリロードされるという利点がありますが、これは要件によって異なります。

よろしく、アレクサンダー。

/**
 * Extended Identity to implement i.e. caching
 */
@Name("org.jboss.seam.security.identity")
@Scope(SESSION)
@Install(precedence = Install.APPLICATION)
@BypassInterceptors
@Startup
public class MyIdentity extends Identity {

  // place a concurrent hash map here

  @Override
  public boolean hasPermission(Object name, String action) {
    // either use the use the cached result in the hash map ... 
    // ... or call super.hasPermission() and cache the result
  }

}
于 2011-09-27T20:49:17.687 に答える