2


0

GWT認証

私はGWT + Springアプリケーションを開発しており、GWTとSpring Securityシステムを統合するのに苦労しています。

サービスは、春のセキュリティと非認証ユーザー(匿名)の場合は401、不正アクセスの場合は403の応答によって保護されます。 ここでの私の問題は、失敗したAsyncRequestが、その処理のために何度もonFailureボイラープレートスタブを入力せずに、必要な方法でこれらのエラーを処理できないことです。

401例外のログインフォームのURLを含む「authorizeform」ヘッダーで応答するSpring Security用の独自のフィルターを開発することができました。

質問は次のとおりです。ボイラープレートonFailureコードなしで401/403例外をグローバルに処理し、指定されたヘッダーからURLにリダイレクトする方法はありますか?

今後のRequestFactoryには「AuthenticationFailedHandler」のようなものがありますが、2.1はまだほとんど文書化されておらず、「急速な開発中」なので、オプションではないようです。

前もって感謝します!

1 Answer


0


アプリケーションレベルでセキュリティ障害を処理する非常に簡単な方法は、1つの一貫した場所でonFailureボイラープレートを処理するアプリケーションの抽象コールバックを定義することです。 コード全体のサービスリクエストごとに、コールバックを使用して特定の処理を実装できます。

public abstract class ServiceCallback implements MethodCallback {
private ServiceCallbackListener listener;

public ServiceCallback(ServiceCallbackListener serviceCallbackActions) {
    this.listener = serviceCallbackActions;
}

@Override
public void onFailure(Method method, Throwable exception) {
    if (method.getResponse().getStatusCode() == 403 || method.getResponse().getStatusCode() == 401) {
        listener.onUnAuthorizedAccess();
    } else {
        onError(method, exception);
    }
}

public abstract void onError(Method method, Throwable exception);
}

これで、次の方法でサービスを呼び出すことができます。

service.callToServer(new ServiceCallback(sessionListener) {
        @Override
        public void onSuccess(Method method, ServiceResponse response) {
            Log.debug("It worked!");
        }

        @Override
        public void onError(Method method, Throwable exception) {
            Log.debug("Didn't work.. ");
        }
    });

もちろん、エラー処理をアプリケーションレベルでのみ実行する場合は、onErrorを空のボディを持つ非抽象メソッドに設定することをお勧めします。