2014-09-30 64 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配置更改。这将使您的服务器停机时间几乎为零。