zoukankan      html  css  js  c++  java
  • 带SoapHeader验证的WebServices

    一般在项目中,制作的都是基于SOAP协议的webservices,其描述语言是WSDL。但是有时候在项目中,需要保证webservices的安全,需要对其进行进行验证,那么我们就要实现SoapHeader,具体的实现方式如下:

    首先就是自定义一个类,继承自System.Web.Services.Protocols.SoapHeader ,然后在这个类中,通过暴露的公共属性和方法来进行校验。

    其次就是在webservices主体方法中,添加对SoapHeader的验证的支持

    最后直接在用户页面进行验证,调用方法即可。

    首先,定义一个sSoapHeader类,暴露出其提供的公共验证字段,并提供验证方法:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace webServiceDemo
    {
        
    public class sSoapHeader:System.Web.Services.Protocols.SoapHeader
        {
            
    private string _UserId = string.Empty;
            
    private string _UserPwd = string.Empty;

            
    public sSoapHeader() { }

            
    public string UserId
            {
                
    get
                {
                    
    return _UserId;
                }
                
    set
                {
                    _UserId 
    = value;
                }
            }

            
    public string UserPwd
            {
                
    get
                {
                    
    return _UserPwd;
                }
                
    set
                {
                    _UserPwd 
    = value;
                }
            }

            
    public void Initial(string username, string password)
            {
                UserId 
    = username;
                UserPwd 
    = password;
            }

            
    public bool IsValid(string uid, string pwd, out string msg)
            {
                msg 
    = "";
                
    if (uid == "admin" && pwd == "admin888")
                {
                    
    return true;
                }
                
    else
                {
                    msg 
    = "对不起,你无法调用";
                    
    return false;
                }
            }
            
    public bool IsValid(out string msg)
            {
                
    return IsValid(_UserId, _UserPwd, out msg);
            }

        }
    }

    其次就是在webservice主体中,添加对此验证方法的支持

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;

    namespace webServiceDemo
    {
        
    /// <summary>
        
    /// Service1 的摘要说明
        
    /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo 
    = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(
    false)]
        
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
        
    // [System.Web.Script.Services.ScriptService]
        public class Service1 : System.Web.Services.WebService
        {
            
    public sSoapHeader s = new sSoapHeader();
            [SoapHeader(
    "s")]   //这里就是添加验证方法的标志
            [WebMethod]
            
    public string HelloWorld(int a,int b)
            {
                
    string msg = "";
                
    if (!s.IsValid(out msg))
                {
                    
    return msg;
                }
                
    return (a + b).ToString();
            }

           
        }
    }

    在上图中,我已经标志的很清楚了[SoapHeader("s")] 就是添加验证方法的标志。

    最后就是在用户页面中进行调用,引用完毕后,需要对soapheader暴露的公共属性方法进行赋值判断,最后调用即可。只要验证正确,便可以正常调用,否则则提示没有权限:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace WEB
    {
        
    public partial class _Default : System.Web.UI.Page
        {
            
    protected void Page_Load(object sender, EventArgs e)
            {
                localhost.Service1 s 
    = new WEB.localhost.Service1();
                localhost.sSoapHeader header 
    = new WEB.localhost.sSoapHeader();
                header.UserId 
    = "admin";
                header.UserPwd 
    = "admin888";
                s.sSoapHeaderValue 
    = header;
                Response.Write(s.HelloWorld(
    2,1));
            }
        }
    }
  • 相关阅读:
    Linux常用命令
    IBM Java多线程 1. 线程基础
    IBM Java多线程 6.其它线程 API 详细信息
    Jakarta Commons Logging学习笔记
    Linux 下存放ssh信息的文件位置
    ArrayList的使用方法
    JAVA基础--JAVA中的反射机制详解
    使用 Bash shell脚本进行功能测试
    log4j详细解
    Eclipse Template用法探讨
  • 原文地址:https://www.cnblogs.com/scy251147/p/2013069.html
Copyright © 2011-2022 走看看