2

GWT ベースのアプリケーションがあります。それにアクセス制御を追加したい。GWT コンポーネントのカスタム アクセス制御を追加する方法はありますか?

アクセス制御/許可を追加することについての私の考えは次のとおりです。

  1. アクセス制御を追加する必要があるクラス (GWT コンポーネント) にアクセス制御アノテーション (存在する場合) を追加します。
  2. このコンポーネントがレンダリングされると、アクセス制御ルールをチェックするカスタム メソッドが呼び出され、その結果に応じてコンポーネントがレンダリングされます。

これをどのように達成できるかについてのアイデア。

4

1 に答える 1

3

GWT アプリでは、アクセス制御を 2 つの方法で行いました。どちらも、すべての AJAX (GWT RPC) 呼び出しで、アクセス制御がサーバーに適用されることを前提としています。JavaScript 側は本質的に安全ではないため、そこにあるコントロールは無意味です。

必要なきめ細かいアクセス制御に応じて、GWT RPC エンドポイントを保護するサーブレット コンテナーによる URL ベースの制御を使用しました。いえ

/public/gwt.rpc.endpoint
/private/gwt.rpc.endpoint

bog 標準の web.xml または spring security を使用して、プライベートなものを保護します。ただし、これにより、GWTアプリケーションを起動する前に、「通常の」フォームベースの方法でログインを処理するようになりました。

よりきめ細かいアプローチは、すべての GWT RPC 公開メソッドで例外を使用することです。

interface MyService extends RemoteService {
  SomeData getPublicData();
  SomeSecret getPrivateData() throws AccessDeniedException; 
  Result login(String username, String password);
}

interface MyServiceAsync {
  void getPublicData(AsyncCallback<SomeData> callback);
  void getPrivateData(AsyncCallback<SomeSecret> callback);
  void login(String username, String password, AsyncCallback<Result> callback);
}

AccessDeniedException を RPC シリアル化可能にすることで、AsyncCallback でその例外を受け取ります。これにより、GWT アプリ内でログイン ダイアログを表示できるようになります。

ただし、実際のログイン呼び出しとサーバー側のセッション処理は、そのためのフレームワークに依存せずに完全に手動で行いました (ただし、Spring Security で実行できます)。

于 2010-11-21T09:00:43.727 に答える