Авторизация Wicket с использованием MetaDataKey - PullRequest
1 голос
/ 08 апреля 2010

Я пытаюсь реализовать простую стратегию авторизации для моего приложения 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<M>) из тип Component не применим для аргументов (* * Тысяча двадцать одна). Предполагаемый тип RoleCheck не является допустимая замена для ограниченного параметра "

Любая помощь будет оценена. Спасибо

1 Ответ

2 голосов
/ 09 апреля 2010

Ваш класс 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)
...