如何在Delphi datasnap rest服务器上过滤请求?

时间:2014-09-30 09:43:11

标签: delphi rest http authentication datasnap

我是这个delphi datasnap的新手,并且几乎没有任何有用的文档。

我已按照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状态代码返回给客户端?

将客户端重定向到其他方法?例如:重定向此resquest:

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

使用另一种方法代替ReverseString。

1 个答案:

答案 0 :(得分: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配置更改。这将使您的服务器停机时间几乎为零。