2010-04-07 61 views
1

我想爲我的Wicket應用程序實現一個簡單的授權策略。我實現了我自己的AuthorizationStrategy(擴展IAuthorizationStrategy)。使用MetaDataKey的檢票授權

http://old.nabble.com/Authorization-strategy-help-td18948597.html 閱讀上述鏈接後,我發現使用元數據驅動的授權比使用Annotations更有意義。

所以我有一個簡單的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給出錯誤

「綁定不匹配:Component 類型的通用方法getMetaData(MetaDataKey<M>)不適用的參數 (MetaDataKey<RoleCheck>)。推斷類型RoleCheck不是

任何幫助,將不勝感激有界參數「一 有效的替代品。謝謝

回答

2

你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) 
+1

謝謝。這正是我正在尋找的。我錯過了使RoleCheck可串行化! (咄!) – JGirl 2010-04-19 15:17:59