2012-02-27 17 views
2

私はこの戦略がうまく働いているかどうかは分かりません。私のアプリでは、2つの別々のログインフォームを持っています.1つは普通のユーザー用、もう1つは管理者専用です(理由は分かりません:))wicketとCompoundAuthorizationStrategy

私は正しいリダイレクトを試みています。私のWebApplicationクラスでは、私は持っています:

init() { 
//...ommited some not related code 
    CompoundAuthorizationStrategy compoundAuthorizationStrategy = new CompoundAuthorizationStrategy(); 
    IAuthorizationStrategy membertPageAuthStrategy = new SimplePageAuthorizationStrategy(MemberTemplatePage.class, 
      HomePage.class) 
    { 
     @Override 
     protected boolean isAuthorized() 
     { 
      //here's my way to define if authorization is completed 
     } 
    }; 

    IAuthorizationStrategy adminPageAuthStrategy = new SimplePageAuthorizationStrategy(AdminTemplatePage.class, 
      AdminLoginPage.class) 
    { 
     @Override 
     protected boolean isAuthorized() 
     { 
      //here's my way to define if authorization is completed 
     } 
    }; 

    compoundAuthorizationStrategy.add(membertPageAuthStrategy); 
    compoundAuthorizationStrategy.add(adminPageAuthStrategy); 

    getSecuritySettings().setAuthorizationStrategy(compoundAuthorizationStrategy); 
//... 
} 

MemberTemplatePageは、ログインしたユーザーページのテンプレートですが、AdminTemplatePageはadminと同じものです。 これで、この連鎖認証戦略では、無許可のMemberTemplatePageとAdminTemplatePageに無許可で入力したときにAdminLoginPageに入力するとHomePageにリダイレクトされますが、AdminTemplatePageにリダイレクトされます。 CompoundAuthorizationStrategyでGoogleに何もできませんでした。それは私にとって最良の選択です。私が間違っていることは何か考えていますか? 私はRoleAuth〜について知っていますが、それは私のものではありません。チェックのすべてがインスタンス化が許可されて成功した場合

答えて

2

、改札ソース内のいくつかの検索の後、私は私のコードでは、この変更します:

init() { 
//...ommited some not related code 
CompoundAuthorizationStrategy compoundAuthorizationStrategy = new CompoundAuthorizationStrategy(); 
IAuthorizationStrategy membertPageAuthStrategy = new SimplePageAuthorizationStrategy(MemberTemplatePage.class, 
     HomePage.class) 
{ 
    @Override 
    protected boolean isAuthorized() 
    { 
     if (/* user not authorized */) 
      { 
       throw new RestartResponseAtInterceptPageException(HomePage.class); 
      } 
      return true; 
    } 
}; 

IAuthorizationStrategy adminPageAuthStrategy = new SimplePageAuthorizationStrategy(AdminTemplatePage.class, 
     AdminLoginPage.class) 
{ 
    @Override 
    protected boolean isAuthorized() 
    { 
     if (/* user not authorized */) 
      { 
       throw new RestartResponseAtInterceptPageException(AdminLoginPage.class); 
      } 
      return true; 
    } 
}; 

compoundAuthorizationStrategy.add(membertPageAuthStrategy); 
compoundAuthorizationStrategy.add(adminPageAuthStrategy); 

getSecuritySettings().setAuthorizationStrategy(compoundAuthorizationStrategy); 
//... 
} 

をそしてそれは、私はそれが

:)をしたかっただけのように動作します
0

これはCompoundAuthorization

public final boolean isInstantiationAuthorized(Class componentClass) 
{ 
    int size = strategies.size(); 
    for (int i = 0; i < size; i++) 
    { 
     IAuthorizationStrategy strategy = strategies.get(i); 
     if (!strategy.isInstantiationAuthorized(componentClass)) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

からのコードでそれは、あなたがそれぞれの戦略に対してインスタンス化しようとしているクラスを確認します。したがって、通常のユーザー権限チェックで成功し、管理者の承認を試み、管理者のログインページにリダイレクトされる可能性があります。あなたはおそらく正しい@roby