我是这个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。
答案 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配置更改。这将使您的服务器停机时间几乎为零。