2011-07-19 10 views
2

私はWicket GAEアプリケーションを開発しています。しかし私には、GAEのセキュリティをWicketと正しく統合するにはどういう疑問がありますか?WicketでGoogle App Engineセキュリティを使用するには?

私は2つのセキュリティ関連のユースケースを持っている:認証されたユーザーに許可さ

  1. ページ:ユーザーのみがそれらを見ることができますログイン - 他のユーザーがGoogleの認証にリダイレクトする必要があります(と、成功した後、戻って取得します同じページ)
  2. 一部のユーザーにはアクションが許可されているページ:すべてのユーザーがそのページを見ることができますが、特別なユーザーだけがアクションを実行できます(例:誰でもニュースを読むことができます。

2番目のフォームやアクションを隠すことでできると思います(他の提案は大歓迎です)。私が最初にやるべきことは見つけられませんでした。

GAEでは、サーブレットベースの認証やAPI呼び出しを使用して、リターンリンクを使用してGoogleの認証にリダイレクトするよう指示しています。私はこれがWicketのリダイレクションで動作すると思いますが、それは401リダイレクトではありませんか?そして、より重要なこと:それをテストする方法?

私がWicketのセキュリティを使用する場合、ユーザーがアクセスできるページとGoogleの認証に送信するページを定義するにはどうすればよいですか?

答えて

0

visural-wicketライブラリのセキュリティ機能(これは私のオープンソースプロジェクトです)によって、探している統合が可能になる場合があります。

このブログの記事は、基本的なメカニズムを説明 - あなたはその後、

public class GoogleUser implements IClient<String> { 
    private final User user; 
    private final boolean admin; 
    public GoogleUser(User user, boolean admin) { 
     this.user = user; 
    }  
    public String getId() { 
     return user.getUserId(); 
    } 
    public User getUser() { 
     return user; 
    } 
    public boolean isAdmin() { 
     return admin; 
    } 
} 

public class MyApp extends Application { 

    public void init() { 
     // ... 
     getSecuritySettings().setAuthorizationStrategy(new com.visural.wicket.security.AuthorizationStrategy(new IClientProvider() { 
      public IClient getCurrentClient() { 
       UserService s = UserServiceFactory.getUserService(); 
       return new GoogleUser(s.getCurrentUser(), s.isUserAdmin()); 
      } 
     })); 
     // ... 
    } 
} 

することができます -

http://www.richardnichols.net/2011/09/securing-wicket-with-visural-wicket/

は、GoogleのユーザーをラップiClientはを返すために彼らのUserServiceのを使って、Googleのセキュリティと統合することができますがこのようなページやコンポーネントにセキュリティを実装する -

public class MyPage extends WebPage implements ISecureRenderInstance { 
    // ... 

    public IPrivilege getRenderPrivilege() { 
     return new IPrivilege<GoogleUser>() { 
      public boolean isGrantedToClient(GoogleUser client) { 
       return client != null && client.isAdmin() 
      } 
     }; 
     // instead of returning a anonymous class like this, you could also 
     // package up common privileges into a singleton instance, 
     // e.g. return Privilege.ADMIN; 
    } 
} 
関連する問題