0

以下のように、Guice をサポートする特別な種類のハンドラーを使用して、リクエスト処理の単一ポイントを定義することができます。

@Singleton
public class GuiceRemoteServiceServlet extends RemoteServiceServlet {
    @Inject
    private Injector injector;

    @Override
    public String processCall(String payload) throws SerializationException {
        RPCRequest req = RPC.decodeRequest(payload, null, this);

        RemoteService service = getServiceInstance(
                req.getMethod().getDeclaringClass());

        return RPC.invokeAndEncodeResponse(service, req.getMethod(),
                req.getParameters(), req.getSerializationPolicy());

    }

    @SuppressWarnings({"unchecked"})
    private RemoteService getServiceInstance(Class serviceClass) {
        return (RemoteService) injector.getInstance(serviceClass);
    }
}

基本的に、これは、ユーザーが認証されているかどうかの確認など、セキュリティ関連の作業を行うのに理想的な場所です。サーバーへのすべてのリクエストでユーザーが認証されていることを確認する必要があります。したがって、一般的には、true/false を返すか、例外をスローするメソッドvalidateUserを追加します。このメソッドは、上記のコードのprocessCall内で呼び出されます。

問題は、クライアント側でこの認証応答をどのように処理するかです。私はそれを単一の場所に置きたいと思っており、すべてのサービスでこのユーザー検証がデフォルトで有効になっていることを確認してください。新しいサービスは、セキュリティ関連のコードを追加せずに「保護」する必要があります。したがって、「onFailure」メソッドなどでこのコードをコピー/貼り付けすることはできません。

何かご意見は?

4

1 に答える 1

1

基本的な RPC メカニズム ( gwtpなどではない) を使用している場合は、抽象 AsyncCallback を作成し、onFailure メソッドを実装してグローバル サーバーの障害を処理できます。他の例外については、呼び出し元が実装できる他のメソッドに委任できます。

サーバーを呼び出すたびに、AsyncCallback の代わりにこの新しいコールバックを使用してください。毎回 onFailure メソッドを実装する必要がないので、これも良いことです。

RequestFactory はこれを使用します。Receiver は抽象的であるため、作成するときに onSuccess メソッドを定義するだけで済みます

于 2012-10-17T22:13:43.337 に答える