2012-08-05 29 views
2

我有一個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); 
    } 
} 

還有其他想法嗎? 提前致謝。

回答

3

對於GWT應用程序來說,它並不是關於保護你的UI的一部分,它更多的是保護你的服務器端提供某個地方所需的數據。

如果有些用戶轉到需要登錄的地方,只需讓遠程服務無法提供任何數據。然後,演示者應該處理失敗並可能重定向到登錄位置。

當然,如果用戶未登錄並且可以這樣做,您可能會想要限制客戶端中的導航。在你的活動mappers。

+0

謝謝你的回覆。我在這裏想要做的是你在最後一句話中提到的「當然,如果用戶沒有登錄,你可能想限制導航到你的客戶端,你可以在你的活動映射器中這樣做」 – Adelin 2012-08-05 19:40:39

2

將您的主ActivityMapper包裝在FilteredActivityMapper中。然後在提供給其構造函數的Filter中執行認證/授權檢查並返回例如LoginFormPlace如果沒有用戶登錄。

+0

我會試試看。非常感謝你。 – Adelin 2012-08-08 12:47:20

相關問題