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 で実行できます)。