使用 Delphi XE 使用 Datasnap 构建一个相对简单的数据库应用程序。
由于我的应用程序中的某些安全性是在数据库级别处理的,因此我需要将用户的 SQL 凭据从我的客户端应用程序传递到我的 Datasnap 服务器。
(如果可能,我正在尝试使 Datasnap 服务器无状态,因此请认识到我必须为每次调用都这样做。)
我在客户端使用 ClientDatasets (CDS),因此我可以使用 OnBeforeGetRecords 将 OwnerData OleVariant 中的数据从客户端上的 CDS 传递到服务器上相应的 TDataSetProvider。但这意味着每个数据模块上的每个 CDS 都必须有一个执行此操作的事件,这看起来很混乱且笨拙。我不禁感到必须有一种方法可以将消息传递到更高级别的服务器。
我真正想要的是在服务器端的 DSServerClass 级别是这样的:
Procedure TMyServerContainer.MyServerClassCreateInstance(DSCreateInstanceEventObject: TDSCreateInstanceEventObject);
begin
// Server detects request for data from client app
fUsername := GetUsernameFromClientSomehow;
fPassword := GetPasswordFromClientSomehow;
// create data modules and initialise
MyDataModule := TMyDataModule.Create(nil);
MyDataModule.InitialiseWithSQLCredentials(fUsername, fPassword);
DSCreateInstanceEventObject.ServerClassInstance := MyDataModule;
End;
身份验证管理器组件可以在这里帮助我吗?还有其他想法吗?还是我坚持使用 OnBeforeGetRecords?
非常感谢。