0
@In
Identity identity;

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

对上述方法的任何调用也会执行“从角色 r 中选择角色”调用,该调用是从底层接缝引擎调用的。如何将此调用的查询缓存设置为查询提示(例如 org.hibernate.cacheable 标志),使其不再被调用。

注意:角色信息永远不会改变,因此我认为这是不必要的 sql 调用。

4

1 回答 1

0

我没有处于休眠状态,但是由于这个问题仍然没有答案:我们扩展了标准的接缝身份类有几个原因。您可能还想扩展它以帮助您缓存结果。

由于此缓存是会话范围的,因此可能会在用户再次登录/注销时重新加载它 - 但这取决于您的要求。

最好的问候,亚历山大。

/**
 * 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 回答