2

アクティビティと場所のパターンを使用して、アプリケーション内のさまざまな場所をナビゲートする GWT アプリケーションがあります。アプリ内には、許可されたユーザーだけが閲覧できる場所があります。

承認メカニズムは次のとおりです。

1- ユーザーがユーザー名とパスワードを入力

2-提供されたパスワードでそのようなユーザーのサーバーを確認します。

3-SID、ユーザー名、有効期限を含むデータストアにトークンを追加します(GAE bwtを使用しています)

4- トークンをクライアントに送信します。

ここで、ユーザーに場所への移動を許可する前に、トークンが有効かどうか、つまり以前に承認操作によってストアに保存されているかどうかを確認して、ユーザーが承認されているかどうかを確認する必要があります。このようなActivityMapperになりました。

public class ApplicationActivityMapper implements ActivityMapper {

  private ActionDispatcherServiceAsync service;

  private SecurityTokenProvider provider;
  private HashMap<Class<? extends Place>, ActivityPlaceMeta> placesActivitiesMap;

  @Inject
  public ApplicationActivityMapper(ActionDispatcherServiceAsync service, SecurityTokenProvider provider, HashMap<Class<? extends Place>, ActivityPlaceMeta> placesActivitiesMap) {

    this.service = service;

    this.provider = provider;

    this.placesActivitiesMap = placesActivitiesMap;

    this.placesActivitiesMap.put(PlaceNotFoundPlace.class, new ActivityPlaceMeta() {
      @Override
      public Activity getActivity(Place place) {
        return new PlaceNotFoundActivity();
      }
    });
  }

  @Override
  public Activity getActivity(Place place) {

    if (place instanceof SecuredPlace) {
      Token token = provider.getToken();
      service.dispatch(new CheckAuthorizationAction(token), new GotResponse<CheckAuthorizationResponse>() {
        @Override
        public void gotResponse(CheckAuthorizationResponse result) {
          if (result.isAuthorized()) {
            //here comes tht problem .... !!! 
            //how to return the place ???
          }
        }
      });
    }

    ActivityPlaceMeta returnedActivity = placesActivitiesMap.get(place.getClass());

    if (returnedActivity == null) {
      return placesActivitiesMap.get(PlaceNotFoundPlace.class).getActivity(new PlaceNotFoundPlace());
    }
    return returnedActivity.getActivity(place);
  }
}

他のアイデアはありますか?少し早いですがお礼を。

4

2 に答える 2

3

GWTアプリケーションでは、UIの一部を保護することではなく、特定の場所に必要なデータを提供するサーバー側を保護することが重要です。

ログインが必要な場所にユーザーがアクセスした場合は、リモートサービスがデータを提供できないようにするだけです。次に、プレゼンターが失敗を処理し、ログイン場所にリダイレクトする必要があります。

もちろん、ユーザーがログインしていない場合は、クライアントでのナビゲーションを制限することをお勧めします。これは、アクティビティマッパーなどで行うことができます。

于 2012-08-05T17:46:12.433 に答える
2

ActivityMapperメインをFilteredActivityMapperでラップします。次に、そのコンストラクターに提供されたフィルターで、認証/承認チェックを実装し、LoginFormPlaceユーザーがログインしていない場合などに返します。

于 2012-08-08T11:31:43.417 に答える