.net 平台下的webservice利用soapheader自定义信息做验证
发布时间:2020-12-17 01:05:39 所属栏目:安全 来源:网络整理
导读:前面几篇文章都说的是在java环境下制作webservice碰到的问题,现在再来说一下在.net平台下如何获取soapheader中的自定义信息。 首先我们先看一下客户端发起请求的soap,其中header部分的CertificationProxy节点为验证信息 soap:Envelope xmlns:soap="http://w
前面几篇文章都说的是在java环境下制作webservice碰到的问题,现在再来说一下在.net平台下如何获取soapheader中的自定义信息。 首先我们先看一下客户端发起请求的soap,其中header部分的CertificationProxy节点为验证信息 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/"> <soap:Header> <tem:CertificationProxy> <!--Optional:--> <tem:USER>xxx</tem:USER> <!--Optional:--> <tem:PWD>xxx</tem:PWD> <!--Optional:--> <tem:REQUEST_SERVER_ADDRESS>xxx</tem:REQUEST_SERVER_ADDRESS> </tem:CertificationProxy> </soap:Header> <soap:Body> <tem:HellowWorld> <!--Optional:--> <tem:strXmlPara>xxx</tem:strXmlPara> </tem:HellowWorld> </soap:Body> </soap:Envelope> 在服务端的这个HelloWorld方法如下 /// <summary> /// HellowWorld /// </summary> /// <returns> HelloWorld</returns> [WebMethod] // 通知客户端该方法的soaphead节点名为CertificationProxy,这里CertificationProxy是代理类名而不是代理类实体变量名; [SoapHeader("certificationProxy")] public string HelloWorld(string s) { string str = "Hello World"; if (IsValidPass()) { if (s.Equals("cnm")) { return "cnm"; } return str; } else { //return "验证未通过"; throw new Exception("验证未通过"); } }其中[SoapHeader("certificationProxy")]中指定的certificationProxy对象是我们对应自定义header信息所构建的类(CertificationProxy)的实例,这个类的内容如下 /// <summary> /// webservice认证代理类 /// </summary> /// <remarks> /// 作成者:cyf /// </remarks> public class CertificationProxy : SoapHeader { private string user = CWConstant.EMPTY; private string pwd = CWConstant.EMPTY; private string requestServerAddress = CWConstant.EMPTY; /// <summary> /// 用户名 /// </summary> public string USER { set { this.user = value; } get { return this.user; } } /// <summary> /// 密码 /// </summary> public string PWD { set { this.pwd = value; } get { return this.pwd; } } /// <summary> /// 发起请求的服务器地址 /// </summary> public string REQUEST_SERVER_ADDRESS { set { this.requestServerAddress = value; } get { return this.requestServerAddress; } } }其中的 USER、PWD、REQUEST_SERVER_ADDRESS这三个属性就是用于对应请求soap中的头部信息 验证的方法(IsValidPass)可以放在一个基类里让方法所属的类去继承,这样每个方法在需要验证的时候就可以调用基类里的验证方法了。 public class WsBase : System.Web.Services.WebService { /// <summary> /// 认证代理类实例 /// </summary> public CertificationProxy certificationProxy; /// <summary> /// 判断请求信息是否通过认证 /// </summary> /// <returns> /// true:通过;false: 未通过 /// </returns> /// <remarks> /// 作成者:cyf /// </remarks> protected bool IsValidPass() { if (CheckUtility.IsEmpty(certificationProxy)) { // 验证信息不存在时 return false; } else { SystemCertification sysCertificate = new SystemCertification(); // 这里添加验证操作 if (sysCertificate.InvokeSystemCertificateMethod(certificationProxy.USER,certificationProxy.PWD)) { // 用户名密码正确时 return true; } else { // 用户名密码不正确时 return false; } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何在AngularJS中的两个模块之间共享数据?
- WSO2 ——(6)开发几种services的方法:SOAP与REST
- angularjs select标签使用ng-repeat标签之后,ng-model无法更
- Error: [$injector:nomod] Module 'dayApp' is
- 从docker容器连接到localhost上的Mysql
- php – 无法看到mysql数据库时,composer安装失败
- Angular 2自定义验证单元测试
- RxJS Operators 详解
- angularjs – 搜索量角器测试记录器
- bash – 如何删除shell上超过x秒(不是几天,几小时或几分钟)