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

将您的 main 包装ActivityMapperFilteredActivityMapper中。然后在提供给其构造函数的过滤器中执行您的身份验证/授权检查并返回,例如LoginFormPlace,如果没有用户登录。

于 2012-08-08T11:31:43.417 回答