2014-09-30 63 views
1

我是新來的這個delphi datasnap的東西,幾乎沒有任何有用的文件。如何篩選Delphi datasnap rest服務器上的請求?

我按照this guide設置了一個簡單的休息服務器。現在我想定義我自己的身份驗證協議。

據我所知。在調用服務器類方法之前,來自遠程客戶端的所有請求都將通過WebModule方法進行處理。到目前爲止,我能夠捕獲客戶端IP地址和這樣的請求URL路徑:

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; 
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); 
begin 
ShowMessage(request.RemoteAddr); // adress where request came from 
ShowMessage(request.PathInfo); // url path 
    Response.SetCustomHeader('access-control-allow-origin','*'); 
    if FServerFunctionInvokerAction <> nil then 
    FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker; 
end; 

我怎麼能:

拒絕請求依賴於特定的IP地址,並返回401狀態碼客戶在達到類方法之前?

重定向客戶端到另一個方法?例如:重定向此請求:

request = new XMLHttpRequest(); 
request.open('GET', 'http://localhost:8080/datasnap/rest/TServerMethods1/ReverseString/blah', true); 

以另一種方法代替ReverseString。

+0

您向HTTP響應添加了CORS標頭(access-control-allow-origin)。知道這是否按預期工作是有趣的,允許跨域請求。 – mjn 2014-09-30 14:15:44

回答

0

複雜的重定向場景可以使用Apache HTTP服務器作爲mod_rewrite模塊的反向代理進行處理。

例如,此答案顯示客戶端IP地址可用於觸發重定向。

https://stackoverflow.com/a/1073877/80901

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$ 
RewriteRule^/maintenance.html 

這會派一些例外維護頁面的所有請求。

使用Apache(或不同的HTTP代理服務器)還可以保持DataSnap服務器連續運行,同時應用Apache配置更改。這將使您的服務器停機時間幾乎爲零。