以下のように、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」メソッドなどでこのコードをコピー/貼り付けすることはできません。
何かご意見は?