Delphi Datasnap 客户端代码未获得未经授权的异常

标签 delphi exception authorization datasnap

我正在使用 Delphi 10.1 Berlin Update 2 Enterprise 和 DataSnap 客户端/服务器 REST 框架。

如果我在不调试的情况下运行应用程序并调用用户无权调用的方法,则代码运行时没有任何异常,并且该方法返回空响应。

当以交互方式调试客户端对 DataSnap 服务器方法的调用时,我收到两个关于“未经授权”的弹出异常。

第一个冒泡并被第二个取代。

第二个异常被“吃掉”并且 session /连接简单地关闭,然后该方法返回一个空白结果(例如,如果返回类型是整数,则返回零,而字符串返回类型返回空字符串)。

这发生在 Datasnap.DSClientRest 单元中 ExecuteRequest 方法末尾附近的以下代码部分中:

except
  on E: TDSRestProtocolException do
    LSessionExpired;
end;

为什么这些异常(例如 TDSRestProtocolException)没有到达我的代码?

我有点认为这是更新 2 的新内容,我记得在更新 2 之前看到这些异常冒泡到我的代码中。

Attached是一个演示问题的骨架示例(由 Delphi 向导生成的标准示例) - 单击按钮,您会得到“”而不是“4321”,因为用户未获得授权 - 但没有运行时异常。

我是 DataSnap 的新手,所以请耐心等待 :-)

提前感谢您的有用回复=)

最佳答案

发生这种情况是因为 DSAuthenticationManager1 组件添加到服务器的 web 模块并且客户端无法进行身份验证。

请通过此检查如何使用身份验证
Adding Authentication and Authorization

关于Delphi Datasnap 客户端代码未获得未经授权的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41928059/

相关文章:

delphi - 通过拖动移动/重新排序选项卡/页面控件

c++ - Windows 转储文件 (hdmp) - 没有 pdb 文件的信息

database - 检查数据库连接是否仍然存在

android - Android什么时候检查Min-sdk?

带有代理授权的 Apache ProxyRemote(通过连接/HTTPS)

php - CakePHP 3 - 关联表的所有权授权

asp.net-mvc - ASP.NET MVC 自定义授权

c# - 从 Delphi DLL 发送二进制数据做一个 C# 应用程序

c++ - 使用预处理器宏构建用于抛出 std::exception 的信息消息的简单方法

c++ - 如果抛出的值匹配多个 catch 子句会发生什么?