TDSAuthenticationManager的用法

TDSAuthenticationManager的用法

TDSAuthenticationManager的用法
xe开始有了TDSAuthenticationManager,这个主要用来做用户认证,用法也很简单

服务器端
1.TDSAuthenticationManager有两个主要的事件

在这个事件里面,看看检测连上来的用户名,密码是否合法,valid如果置为false,这就为非法连接了,DSServer会立刻抛出异常后close连接。
另外,UserRoles的设计,我觉得比RO高明。

procedure TServerContainer1.DSAuthenticationManager1UserAuthenticate(   Sender: TObject; const Protocol, Context, User, Password: string;  
var

valid: Boolean;

UserRoles: TStrings;
begin 
valid := User = 'zyz';    
if User = 'admin' then   
UserRoles.Add('admins');
end;

在这个事件里面,判断已经连接上来的用户,对ServerMethod的调用是否合法,注视里也写了,默认是如何检测是否合法的。
procedure TServerContainer1.DSAuthenticationManager1UserAuthorize(   Sender: TObject; EventObject: TDSAuthorizeEventObject;   var valid: Boolean);
begin 
{ TODO : Authorize a user to execute a method.     Use values from EventObject such as UserName, UserRoles, AuthorizedRoles and
DeniedRoles.     Use DSAuthenticationManager1.Roles to define Authorized and Denied roles     for particular server methods. } 
//valid := True;
end;

上面我说UserRoles的设计比较高明,主要还是因为这个UserRole的设计用到了java的那种注释类的技术,比如服务器上这么定义一个方法

?12 [TRoleAuth('admins')] function EchoString(Value: string): string;

这样定义后,就算不写DSAuthenticationManager1UserAuthorize,TDSAuthenticationManager也会自动帮你检查该角色是否有权利调用该ServerMethod。RTTI估计是学Java的Annotation才增加了TCustomAttribute。


2.客户端
客户端很简单了,设置SQLConnection的DSAuthUser和DSAuthPassword就行了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Delphi中,使用DataSnap获取当前会话非常简单。可以使用TDSAuthenticationManager类。该类包含一个GetCurrentAuthentication方法,它将返回TDBXReader类。该类的实例包含关于当前活动会话的详细信息,如用户名,会话ID,会话开始时间和过期时间等。 具体地说,您可以使用以下代码从DataSnap服务器获取当前会话: 1. 在DataSnap服务器的OnConnect事件中,将TDBXConnection类的连接属性设置为TDBXConnection被分配的连接。 2. 在您需要获取当前会话的代码中,使用以下代码获取TDSAuthenticationManager类的实例: var DSAManager: TDSAuthenticationManager; begin DSAManager := TDSAuthenticationManager.Create(Connection); try // get current authentication AReader := DSAManager.GetCurrentAuthentication; finally DSAManager.Free; end; end; 3. 您可以在AReader中遍历数据以获取当前会话的详细信息。 值得注意的是,您需要在连接到DataSnap服务器时设置TDBXConnection的连接属性,否则无法获取当前会话。此外,您可以使用TDSAuthenticationManager类的其他方法来管理DataSnap服务器上的身份验证和权限。 ### 回答2: Delphi DataSnap 是一种通过远程数据传输技术实现客户端与服务器之间进行数据交流的框架。在使用 Delphi DataSnap 进行开发时,我们经常需要获取当前的 Session 信息,以便做出相应的处理。 获取当前 Session 的步骤如下: 1. 在 Delphi DataSnap 服务器端,可以通过 DSServerClass 的 OnConnect 和 OnDisconnect 事件来获取 Session 的信息。其中,OnConnect 事件在客户端连接到服务器时触发,OnDisconnect 事件在客户端断开连接后触发。 2. 在 OnConnect 事件中,可以通过 AConnection 参数的 Session 属性来获取当前 Session 的信息。Session 是一个 TDSSession 对象,包含了当前 Session 的唯一标识符、创建时间、最后访问时间、用户信息等。 3. 在 OnDisconnect 事件中,可以通过 Sender 参数转换为 TDSClientCallbackChannelManager 对象,再通过该对象的 Sessions 属性获取所有有效的 Session 列表。 通过以上步骤,我们可以很方便地获取当前 Session 的信息,并对其进行相应的操作。需要注意的是,在使用 Delphi DataSnap 进行开发时,我们应该根据具体的场景和需求,选择合适的 Session 管理方式,以实现更好的性能和可靠性。 ### 回答3: 要获取当前的Session,可以使用Delphi DataSnap提供的TCMSSessionManager组件。这个组件可以管理会话,例如创建、删除和管理会话列表。要获得当前的Session,可以通过如下方法实现: 1. 首先,将TCMSSessionManager组件添加到DataSnap服务器应用程序中。这可以通过在控件面板中选择“DSServer”组件,右键单击鼠标并选择“Add Component”,然后在新出现的对话框中选择“TCMSSessionManager”。 2. 在DataSnap服务器应用程序的代码中,可以使用以下语句获取当前的Session: var currentSession: TCMSession; begin currentSession := TCMSessionManager.GetThreadSession; // 使用当前会话 end; 这个代码段使用TCMSSessionManager的GetThreadSession方法来获取当前的Session。一旦获取了当前的Session,就可以使用它来处理会话特定的任务,例如安全认证或读写会话数据。 总之,使用Delphi DataSnap获取当前的Session可以通过使用TCMSSessionManager组件中的GetThreadSession方法实现。这种方法可以让开发者使用DataSnap应用程序的会话,例如处理数据访问、安全认证和其他一些特定于会话的任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值