在WebService中,用户身份认证信息可以在客户端通过soap头(soap
header)进行传送。在WebService服务端的编写中,需要对soap头进行处理,这个处理过程就是提取Soap
Header中的用户认证信息进行验证。下面就来看看在Delphi中这个身份认证是如何实现的:
通过WSDL
import引入WEBSERVICE,DELPHI会自动产生自定义的Header类,这个类继承于TSoapHeader。
ShuSoapHeader = class(TSOAPHeader)
private
FNMsg:
WideString;
FUserID:
WideString;
FPassWord:
WideString;
published
property
NMsg: WideString read FNMsg write FNMsg;
property
UserID: WideString read FUserID write FUserID;
property
PassWord: WideString read FPassWord write FPassWord;
end;
同时自动产生引用接口:
InvRegistry.RegisterInterface(TypeInfo(SLoginServicesSoap),
'http://passport.shu.edu.cn/', 'utf-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(SLoginServicesSoap),
'http://passport.shu.edu.cn/%operationName%');
InvRegistry.RegisterHeaderClass(TypeInfo(SLoginServicesSoap),
ShuSoapHeader, 'ShuSoapHeader', '');
RemClassRegistry.RegisterXSClass(ShuSoapHeader,
'http://passport.shu.edu.cn/', 'ShuSoapHeader');
RemClassRegistry.RegisterXSInfo(TypeInfo(ArrayOfString),
'http://passport.shu.edu.cn/', 'ArrayOfString');
客户端使用:
var
i:integer;
aIntf: SLoginServicesSoap;
soaphead : ShuSoapHeader;
Headers: ISOAPHeaders;
begin
aIntf :=
sLogin as SLoginServicesSoap;//THTTPRIO控件
soaphead:= ShuSoapHeader.Create;
soaphead.UserID :='';
soaphead.PassWord := '';
try
Headers := (aIntf as
ISOAPHeaders);
Headers.Send(soaphead); //发送Soap Header
i:=
aIntf.ValidByEd(Trim(Edit_name.Text),Trim(Edit_pass.Text));
finally
aIntf := nil;
soaphead.Free;
end;
加载中,请稍候......