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