@In
Identity identity;
Boolean newValue = identity.hasPermission(target, action);
对上述方法的任何调用也会执行“从角色 r 中选择角色”调用,该调用是从底层接缝引擎调用的。如何将此调用的查询缓存设置为查询提示(例如 org.hibernate.cacheable 标志),使其不再被调用。
注意:角色信息永远不会改变,因此我认为这是不必要的 sql 调用。
我没有处于休眠状态,但是由于这个问题仍然没有答案:我们扩展了标准的接缝身份类有几个原因。您可能还想扩展它以帮助您缓存结果。
由于此缓存是会话范围的,因此可能会在用户再次登录/注销时重新加载它 - 但这取决于您的要求。
最好的问候,亚历山大。
/**
* 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
}
}