2011-07-19 84 views
2

我正在開發一個Wicket GAE應用程序,並且一切看起來都很好。但是我有一個問題,如何將GAE的安全性與Wicket正確整合?如何在Wicket上使用Google App Engine安全性?

我有兩個與安全相關的用例:

  1. 頁面允許通過認證的用戶:只有登錄用戶可以看到他們 - 其他用戶必須重定向到谷歌的認證(和,成功後,我們回到任何用戶都可以看到頁面,但只有特殊用戶可以運行操作(例如:任何人都可以閱讀新聞,但只有特定文章的作者可以編輯)。

第二個我想我可以通過「隱藏」表單和/或操作(其他建議是受歡迎的)。第一個我找不到該怎麼做。

GAE指示使用基於servlet的身份驗證或某些API調用通過返回鏈接重定向到Google的身份驗證。我猜這適用於Wicket的重定向,但不應該是401重定向?而且,更重要的是:如何測試它?

如果我使用Wicket的安全性,我該如何定義用戶可以訪問的頁面以及如何發送到Google的auth?

回答

0

visural-wicket庫的安全特性(完全公開 - 這是我的開源項目)可能允許您尋找的集成。

本博客文章解釋的基本機制 -

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

您可以通過使用他們的UserService與谷歌的安全集成到返回IClient包裝的谷歌用戶 -

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()); 
      } 
     })); 
     // ... 
    } 
} 

然後,您可以在您的頁面或組件中實施安全性 -

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; 
    } 
} 
相關問題