アクティビティと場所のパターンを使用して、アプリケーション内のさまざまな場所をナビゲートする 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);
}
}
他のアイデアはありますか?少し早いですがお礼を。