2012-10-16 47 views
0

它可以定義的要求單點有特殊的處理程序與吉斯支持處理,如下圖所示:GWT ::過程中的服務器錯誤

@Singleton 
public class GuiceRemoteServiceServlet extends RemoteServiceServlet { 
    @Inject 
    private Injector injector; 

    @Override 
    public String processCall(String payload) throws SerializationException { 
     RPCRequest req = RPC.decodeRequest(payload, null, this); 

     RemoteService service = getServiceInstance(
       req.getMethod().getDeclaringClass()); 

     return RPC.invokeAndEncodeResponse(service, req.getMethod(), 
       req.getParameters(), req.getSerializationPolicy()); 

    } 

    @SuppressWarnings({"unchecked"}) 
    private RemoteService getServiceInstance(Class serviceClass) { 
     return (RemoteService) injector.getInstance(serviceClass); 
    } 
} 

基本上,這是理想的地方做一些安全相關的東西,比如檢查用戶是否被認證。我需要確保用戶通過對服務器的任何請求進行身份驗證。所以一般情況下我會添加方法validateUser,這將返回true/false或拋出異常。在上面的代碼中,將在processCall內調用此方法。

現在的問題是 - 我如何處理這個身份驗證響應客戶端?我想將它放到單個地方,並確保任何服務默認情況下都會啓用此用戶驗證。任何新服務必須「安全」,而不添加任何與安全相關的代碼。所以沒有在「onFailure」方法或類似的東西中複製/粘貼這段代碼。

有什麼想法?

回答

1

如果您使用的是基本的RPC機制(例如不是gwtp),則可以創建一個抽象的AsyncCallback並實現onFailure方法來處理全局服務器故障。對於其他例外情況,您可以將其委託給調用方可以實現的其他方法。

每次調用服務器時,只需使用此新回調代替AsyncCallback即可。這也是一件好事,因爲您現在不必每次都實施onFailure方法。

RequestFactory使用這一點,Receiver是抽象的,所以當你創建一個,你只需要定義的onSuccess方法。

+0

這很好,我決定這樣做 - 但是爲了處理常見的異常處理而創建另一個抽象類並不好。 – jdevelop

相關問題