我有一個GWT應用程序,使用Activities和Places模式導航,在我的應用程序中拋出不同的地方。 在應用程序中有些地方只有授權用戶才能查看。在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);
}
}
還有其他想法嗎? 提前致謝。
謝謝你的回覆。我在這裏想要做的是你在最後一句話中提到的「當然,如果用戶沒有登錄,你可能想限制導航到你的客戶端,你可以在你的活動映射器中這樣做」 – Adelin 2012-08-05 19:40:39