0

GWTPでのセッション管理に関する基本的な質問がいくつかあります。

  1. ここで、ユーザーがアプリケーションにログインしたときに新しいセッションを作成します。これで、ブラウザを開いて、ログインせずにトークンを使用してアプリのURLを直接入力できます。これにより、チェックなしでUIページがユーザーに表示されます。これで、サーバー側でセッションチェックが行われます。したがって、UIページがレンダリング時にサーバー呼び出しを行う場合にのみ、セッションが無効であることがわかり、ログインページにリダイレクトできます。ただし、UIページにサーバー側のロジックがなく、ユーザーがそのトークンを使用してURLを直接貼り付ける場合をどのように処理しますか。

セッションが有効であることを確認するためだけに、GWTPプレゼンターからのすべてのページ要求でサーバー呼び出しを行う必要がありますか?それとも他のアプローチがありますか?

  1. GWTクライアントからサーバーに明示的なセッションIDパラメーターを渡していない。JSessionIdのみがブラウザからサーバーに自動的に渡されます。サーバーでrequest.getSession()を実行し、それがnullかどうかを確認します(nullの場合はログインしません)。したがって、これに関してセキュリティ上の問題が発生しないことを願っています。確認してください。

  2. Androidで実行されているGWTクライアントと、Jerseyを使用してRestful Webサービスとして公開されているサーバー側ロジックを使用して、Restful WSはステートレスであるため、セッションを維持するにはどうすればよいですか。この場合、どのようにしてユーザーセッションを実現しますか?

4

2 に答える 2

1

いいえ。毎回サーバーを呼び出す必要はありません。ログに記録したら、現在のユーザーをログに記録されたキーパークラスに1回だけ設定します。@UseGatekeeperアノテーションは、現在のユーザーインスタンスのみをチェックし、サーバー呼び出しを行わないようにします。現在のユーザーが存在する場合は、canRevealメソッドからtrueを返します。そしてそれはurlのそのプレゼンター名トークンにアクセスすることを可能にします。

セッションアクセスを必要としない場合は、代わりに@NoGatekeeperを使用します。

>> let me know if the understanding is fine with your solution. Also, what about point 2 and 3 questions?

A.1Uはjsessionを使用できます。セキュリティ上の問題はありません。A.2 JSESSION idを使用することにより、サーバーは同じセッションを取得する場合に機能するため、サーバー呼び出しを行うためにjsessionidを渡すことができます。

于 2012-06-21T08:21:59.623 に答える
0

セキュリティは常にサーバー側で実施する必要がありますが、通常のユーザーが管理ページを覗き見することはおそらく望ましくありません。GWTPでは、カスタムGatekeeperクラスを作成することにより、一部のプレゼンターが自分自身を公開するのを防ぐことができます。

@Singleton
public class LoggedInGatekeeper implements Gatekeeper {  

  private final CurrentUser currentUser;

  @Inject
  public LoggedInGatekeeper (
      final CurrentUser currentUser ) {
    this.currentUser = currentUser;
  }

  @Override
  public boolean canReveal() {
    return currentUser.isLoggedIn();
  }
}

次に@UseGatekeeper、保護する各プレゼンターのプロキシに注釈を追加するだけです。

  @ProxyCodeSplit
  @NameToken("userSettings")
  @UseGatekeeper( LoggedInGatekeeper.class )
  public interface MyProxy extends ProxyPlace<MainPagePresenter> {}

カスタムginjectorにgetLoggedInGatekeeper()メソッドがあることを確認する必要があります。ginjectorでは、このメソッドを使用@DefaultGatekeeperして、注釈が付けられていないプロキシに使用するGatekeeperクラスを返すgetメソッドに注釈を付けることもできます@UseGatekeeper。を使用@DefaultGatekeeperし、プロキシがゲートキーパーを使用しないように指定する場合は、@NoGatekeeperそのプロキシのアノテーションを使用します。

エラーを処理するプレゼンターがゲートキーパーを使用していないことを確認する必要があります。そうしないと、エラーが発生するリスクがあります。このため、このプレゼンターのプロキシに。で注釈を付けることをお勧めし@NoGatekeeperます。プレゼンター処理エラーは、カスタムPlaceManagerのrevealErrorPlaceメソッドによって明らかにされたものです。そのメソッドをオーバーライドしない場合、それはあなたのrevealDefaultPlaceメソッドによって明らかにされたものです。

詳細については、GWTPドキュメントを参照してください

于 2012-06-21T07:01:09.100 に答える