• webService访问加密-Soapheader


    WebService head加密,可以对 WebService设置访问用户名和密码,增强 WebService的安全性 使 WebService只能被授权用户使用。 

    具体实现步骤: 

    1、 定义一个 soapheader派生类用来实现 WebService访问权限验证
    [csharp] view plaincopy
     
    1. <span style="font-size:10px;">using System;  
    2. using System.Data;  
    3. using System.Configuration;  
    4. using System.Web;  
    5. using System.Web.Security;  
    6. using System.Web.UI;  
    7. using System.Web.UI.HtmlControls;  
    8. using System.Web.UI.WebControls;  
    9. using System.Web.UI.WebControls.WebParts;  
    10.   
    11. /// <summary>  
    12. ///MySoapHeader 的摘要说明  
    13. /// </summary>  
    14. public class MySoapHeader:System .Web .Services .Protocols .SoapHeader   
    15. {  
    16.     private string _uname = string.Empty;//webservice访问用户名  
    17.   
    18.     public string Uname  
    19.     {  
    20.         get { return _uname; }  
    21.         set { _uname = value; }  
    22.     }  
    23.     private string _password = string.Empty;//webservice访问密码  
    24.   
    25.     public string Password  
    26.     {  
    27.         get { return _password; }  
    28.         set { _password = value; }  
    29.     }  
    30.   
    31.   
    32.     public MySoapHeader()  
    33.     {  
    34.      //  
    35.      //TODO: 在此处添加构造函数逻辑  
    36.      //  
    37.     }  
    38.     public MySoapHeader(string uname, string upass)  
    39.     {  
    40.         init(uname, upass);  
    41.     }  
    42.     private void init(string uname, string upass)  
    43.     {  
    44.         this._password = upass;  
    45.         this._uname = uname;  
    46.     }  
    47.     //验证用户是否有权访问内部接口  
    48.     private bool isValid(string uname, string upass, out string msg)  
    49.     {  
    50.         msg = "";  
    51.         if (uname == "admin" && upass =="admin")  
    52.         {  
    53.             return true;  
    54.         }  
    55.         else {  
    56.             msg = "对不起!您无权调用此WebService!";  
    57.             return false;  
    58.         }  
    59.     }  
    60.     //验证用户是否有权访问外部接口  
    61.     public bool isValid(out string msg)  
    62.     {  
    63.         return isValid(_uname, _password,out msg);  
    64.     }  
    65. }  
    66.   
    67.   
    68. </span>  


    2、 定义有需要验证的 WebService。 

    [csharp] view plaincopy
     
    1. <span style="font-size:10px;">using System;  
    2. using System.Collections;  
    3. using System.Linq;  
    4. using System.Web;  
    5. using System.Web.Services;  
    6. using System.Web.Services.Protocols;  
    7. using System.Xml.Linq;  
    8.   
    9. /// <summary>  
    10. ///test 的摘要说明  
    11. /// </summary>  
    12. [WebService(Namespace = "http://tempuri.org/")]  
    13. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
    14. //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。   
    15. // [System.Web.Script.Services.ScriptService]  
    16. public class test : System.Web.Services.WebService {  
    17.   
    18.     public test () {  
    19.   
    20.         //如果使用设计的组件,请取消注释以下行   
    21.         //InitializeComponent();   
    22.     }  
    23.     public MySoapHeader myheader = new MySoapHeader();  
    24.     [WebMethod]  
    25.     public string HelloWorld() {//普通WebService,无需验证  
    26.         return "Hello World";  
    27.     }  
    28.     [SoapHeader("myheader")]//加入此头部的WebService需要验证,不加则为普通WebService无需验证  
    29.   
    30.     [WebMethod(Description = "根据产品编号查询产品的价格", EnableSession = true)]  
    31.   
    32.     public string GetProductPrice2(string ProductId)  
    33.     {  
    34.   
    35.         string msg = "";  
    36.   
    37.         //验证是否有权访问  
    38.   
    39.         if (!myheader.isValid(out  msg))  
    40.         {  
    41.   
    42.             return -1;//返回错误信息  
    43.   
    44.         }  
    45.   
    46.         return ProductId;  
    47.     }  
    48.  }            
    49.    </span>  



    3、 客户端调用方法 

    引用 WebService定义 WebService名称为 :Myservice

    [csharp] view plaincopy
     
    1. <span style="font-size:10px;">using System;  
    2. using System.Configuration;  
    3. using System.Data;  
    4. using System.Web;  
    5. using System.Web.Security;  
    6. using System.Web.UI;  
    7. using System.Web.UI.HtmlControls;  
    8. using System.Web.UI.WebControls;  
    9. using System.Web.UI.WebControls.WebParts;  
    10. public partial class _Default : System.Web.UI.Page   
    11. {  
    12.     protected void Page_Load(object sender, EventArgs e)  
    13.     {  
    14.         myservice.test te = new abc.test();  
    15.         myservice.MySoapHeader myhead = new MySoapHeader();  
    16.         myhead.Uname = "admin";//输入WebService访问用户名  
    17.         myhead.Password = "admin";//输入WebService访问密码  
    18.         te.MySoapHeaderValue = myhead;//  
    19.         string test = te.GetProductPrice2("ok!");  
    20.       Response.Write(aa);//用户名、密码输入正确则输出ok 否则输出 错误msg  
    21.     }  
    22. } </span>  

    也推荐另外一个cookie的方式http://blog.csdn.net/dz45693/article/details/6151170

  • 相关阅读:
    设置linux文件权限,使得同一用户组的可以在文件夹内自由增删文件(夹)
    opencv3.4.8编译opencv-contrib并使用sift
    安装anaconda简单教程
    Arch升级时断开链接恢复
    配置远程连接容器内镜像(映射容器内系统的22端口到宿主机上)
    t-SNE是什么?
    远程连接路由器下的主机
    windows下,本地PyCharm连接远程服务器显示图片
    卷积网络中,关于BatchNorm的训练与加载
    学习Keras
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/4567841.html
Copyright © 2020-2023  润新知