2010-12-29 7 views
3

私は現在、Google App EngineにデプロイされるGWT 2.1アプリケーションを開発中です。新しいRequestFactoryを使ってサーバー通信を実現したいと思います。GWT 2.1のRequestFactoryを使用してセキュリティ制約を処理するには?

ここで私の質問は、この状況できめ細かなセキュリティの問題を処理する方法ですか?いくつかのサーバアクション(RequestContextスタブで宣言されたもの)は、特定のユーザに制限されます(おそらく、リモート呼び出しのパラメータに依存します)。通話が許可されていない場合は、クライアントにログインページを表示してもらいます(たとえば、別のユーザーとしてログインできるようにする)。

「Expenses」の例では、ログインページへの自動リダイレクトを実装する方法を知っていますが、この例ではセキュリティモデルは非常に単純です。クライアントがログに記録されているin。

私のサーバー側サービスでカスタムUnAuthorizedExceptionを発生させますか?この例外はどこで傍受すべきですか? (これは、Expensesの例のGaeAuthFilterのようなサーブレットフィルタで行うことができますか?)

答えて

5

私はまたこれに対する解決策を探していて、以下を思いついていました。物事のユーザーインターフェイスの側面(ログインページへのリダイレクト)は完全には処理されませんが、権限のないアクセスからデータレイヤーが保護されます。

public class MyRequestFactoryServlet extends RequestFactoryServlet 
{ 
    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException 
    { 
     if (! userIsLoggedIn(req)) 
     { 
      throw new ServletException("not logged in"); 
     } 
     else 
     { 
      super.doPost(req, res); 
     } 
    } 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
    { 
     if (! userIsLoggedIn(req)) 
     { 
      throw new ServletException("not logged in"); 
     } 
     else 
     { 
      super.doGet(req, res); 
     } 
    } 

    protected boolean userIsLoggedIn(HttpServletRequest req) 
    { 
     // insert your custom code here for checking session for valid login token 
     User user = (User) req.getSession().getAttribute("LOGGED_IN_USER"); 
     return user != null && user.isEnabled(); 
    } 

次に、RequestFactoryServletではなくweb.xmlでMyRequestFactoryServletを使用します。

ログインのUIの側面を処理するために、私のアプリケーションのランディングページでGWT RPCを使用して有効なログインを確認します。ユーザーがログインしていない場合は、ユーザー名/パスワードの入力を求められます。上記のコードは、バックエンドを、他のURLに直接ジャンプしたり、手動でサーブレットにデータを投稿してログインページを迂回しようとするユーザーから保護します。

+0

お返事ありがとうございます。私はこれがAndroid用に同じRFを使用するときにどのように実装されるのだろうか?私はアンドロイドの下で同じrequestfactoriesとオブジェクトを使用し、私はセッションの属性を設定する方法についてはわかりません。あなたはこれに対処しましたか? – Patrick