【发布时间】:2011-08-31 17:22:37
【问题描述】:
我正在使用 wicket 1.4.9 并实现了 spring + wicket auth-role 并基于页面上的角色使用 @AuthorizeInstantiation。我有多个自定义角色。
我已经按照这个链接来实现基础知识: https://cwiki.apache.org/WICKET/spring-security-and-wicket-auth-roles.html
之后我实现了自己的 UserDetailsService 以从数据库中拥有自己的角色/用户。
现在,如何使用组件(例如,链接、按钮)对角色进行控制?喜欢 链接 A 只能由 SUPER_USER、DR_MANAGER 访问。 (角色来自数据库)。
我已经这样做了,它似乎有效,但这是做到这一点的好方法吗? OrbitWebSession 的类型为 AuthenticatedWebSession。
@Override
public boolean isVisible() {
if(OrbitWebSession.get().getRoles().hasRole("SUPER_USER")){
return true;
}
return false;
}
谢谢。
【问题讨论】:
-
您提到角色基于数据库查询。小心在 isVisible() 中进行昂贵的调用。这是一个简单的计算,但请确保所有内容都正确缓存。
-
好的,请澄清我的困惑,如果我的自定义 AunthenticatedWebSession 覆盖 getRoles() 方法,并且如果此方法从 SecurityContextHolder 获取角色,它从我的 UserDetails 加载角色,它不是缓存吗?还是在每次调用时从我的用户实体中获取所有角色?
-
我对Spring不熟悉;我只是想确保您的 User 对象已被缓存 - 每次运行此方法时都运行数据库查询会很糟糕。
标签: wicket