【问题标题】:Wicket Authorization Using MetaDataKey使用 MetaDataKey 的 Wicket 授权
【发布时间】:2013-01-14 16:55:48
【问题描述】:

我正在尝试为我的 Wicket 应用程序实施一个简单的授权策略。我实现了自己的 AuthorizationStrategy(扩展 IAuthorizationStrategy)。

http://old.nabble.com/Authorization-strategy-help-td18948597.html 在阅读了上面的链接之后,我认为使用元数据驱动的授权比使用注释更有意义。

所以我有一个简单的 RoleCheck 类

public class RoleCheck {

 private String privilege;

 public RoleCheck(String priv) {
  this.privilege = priv;
 }

 public void setPrivilege(String privilege) {
  this.privilege = privilege;
 }

 public String getPrivilege() {
  return privilege;
 }
}

我添加了一个组件:

public static MetaDataKey<RoleCheck> priv = new MetaDataKey<RoleCheck>() {};
editLink.setMetaData(priv, new RoleCheck("Update"));

在我的授权策略类中,我尝试获取与组件关联的元数据:

public boolean isActionAuthorized(Component component, Action action) {
  if (action.equals(Component.RENDER)) {
      RoleCheck privCheck = (RoleCheck) component.getMetaData(EditControlToolBar.priv);
      if (privCheck != null) {
           ...
      }
}

但是 getMetaData 给出错误

"绑定不匹配:泛型方法getMetaData(MetaDataKey&lt;M&gt;)Component 类型不适用于参数 (MetaDataKey&lt;RoleCheck&gt;)。推断类型 RoleCheck 不是 有效替代有界参数“

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: authorization wicket


    【解决方案1】:

    您的 RoleCheck 类应该实现 Serializable。

    您使用的是 Wicket 1.4 吗?在这种情况下,我建议这样做:

    public class RolePermissionKey extends MetaDataKey<RoleCheck> {
        public static final RolePermissionKey KEY = new RolePermissionKey();
    }
    

    要将其添加到组件中:

    editLink.setMetaData(RolePermissionKey.KEY, new RoleCheck("Update"));
    

    并执行授权:

    RoleCheck privCheck = component.getMetaData(RolePermissionKey.KEY)
    

    【讨论】:

    • 谢谢。这正是我想要的。我错过了使 RoleCheck 可序列化! (呃!)
    猜你喜欢
    • 2011-08-31
    • 2013-10-15
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多