通过SoapHeader来增强Web Service的安全性

通过SoapHeader来增强Web Service的安全性

1.Web Service实现步骤

  首先引入命名空间
using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols;  //对soap Head引用添加的命名空间

(1)定义自己的SoapHeader派生类。

public class MyHeader : System.Web.Services.Protocols.SoapHeader
    {
        private string _UserID = string.Empty;
        private string _PassWord = string.Empty;

        ///
        /// 构造函数
        ///
        public MyHeader()
        {

        }

        ///
        /// 构造函数
        ///
        /// 用户ID
        /// 加密后的密码
        public MyHeader(string nUserID, string nPassWord)
        {
            Initial(nUserID, nPassWord);
        }

 

        #region 属性

        ///
        /// 用户名
        ///
        public string UserID
        {
            get { return _UserID; }
            set { _UserID = value; }
        }

        ///
        /// 加密后的密码
        ///
        public string PassWord
        {
            get { return _PassWord; }
            set { _PassWord = value; }
        }

        #endregion

        #region 方法
        ///
        /// 初始化
        ///
        /// 用户ID
        /// 加密后的密码
        public void Initial(string nUserID, string nPassWord)
        {
            UserID = nUserID;
            PassWord = nPassWord;
        }

        ///        
        /// 用户名密码是否正确
        ///
        /// 用户ID
        /// 加密后的密码
        /// 返回的错误信息
        /// 用户名密码是否正确
        public bool IsValid(string nUserID, string nPassWord, out string nMsg)
        {
            nMsg = "";
            try
            {
                //判断用户名密码是否正确
                if (nUserID == "admin" && nPassWord == "admin")
                {
                    return true;
                }
                else
                {
                    nMsg = "对不起,你无权调用此Web服务,可能有如下原因:/n 1.您的帐号被管理员禁用。/n 2.您的帐号密码不正确";
                    return false;
                }
            }

            catch
            {
                nMsg = "对不起,你无权调用此Web服务,可能有如下原因:/n 1.您的帐号被管理员禁用。/n 2.您的帐号密码不正确";
                return false;
            }

        }

        ///
        /// 用户名密码是否正确
        ///
        /// 用户名密码是否正确
        public bool IsValid(out string nMsg)
        {

            return IsValid(_UserID, _PassWord, out nMsg);
        }
        #endregion
    }
(2)添加基于SoapHeader验证的Web Service接口方法:

///
    /// myService 的摘要说明
    ///
    //[WebService(Namespace="
http://MyServer/MyWebServices/")]
    public class myService : System.Web.Services.WebService
    {

        ///
        /// Soap头实例
        ///
        public MyHeader myHeader = new MyHeader();  //实例化SoapHead

        public myService()
        {
            //CodeGenerated: 自动生成的代码,该调用是 ASP.NET Web 服务设计器所必需的
            InitializeComponent();
        }

 

        #region 组件设计器生成的代码
        //Web 服务设计器所必需的
        private IContainer components = null;

        ///
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        ///
        private void InitializeComponent()
        {

        }

        ///
        /// 清理所有正在使用的资源
        ///
        protected override void Dispose(bool disposing)
        {
            if (disposing && components != null)
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #endregion
        // WEB 服务示例
        // HelloWorld() 示例服务返回字符串 Hello World
        // 若要生成,请取消注释下列行,然后保存并生成项目
        // 若要测试此 Web 服务,请按 F5 键


        ///
        /// 正常调用的方法
        ///
        ///
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        ///
        /// 需要验证的方法,添加SoapHeader标识
        ///
        ///
        ///
        [SoapHeader("myHeader")]
        [WebMethod(Description = "HelloWord", EnableSession = true)]
        public string HelloWorld2(string contents)
        {
            string msg = "";
            //验证是否有权访问
            if (!myHeader.IsValid(out msg))
                return msg;

            return "Hello World:" + contents;
        }
    }
 
2.客户端调用具有SoapHeader的Web Service
       //创建myService对象
        StudySoapHead.myService service =  new StudySoapHead.myService();
        //创建soap头对象
        StudySoapHead.MyHeader header=new StudySoapHead.MyHeader();
        //设置soap头变量
        header.PassWord = "admin";
        header.UserID = "admin";
        service.myHeader = header;
        //调用web 方法
        Console.WriteLine(service.HelloWorld());
        Console.WriteLine(service.HelloWorld2("Valid request!"));
        Console.Read();

通过SoapHeader对用户口令进行验证,只有授权的用户才可以使用该接口。确保了访问接口用户的安全性。

  转自:http://blog.csdn.net/dongxinxi/article/details/6305656#comments

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22392018/viewspace-766626/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22392018/viewspace-766626/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Java 中调用 Web Service 并添加认证头(soapenv:Header),可以按照以下步骤进行操作: 1. 创建一个 `javax.xml.soap.SOAPMessage` 对象 ``` MessageFactory factory = MessageFactory.newInstance(); SOAPMessage message = factory.createMessage(); ``` 2. 创建一个 `javax.xml.soap.SOAPHeader` 对象,并将其添加到 `SOAPMessage` 中 ``` SOAPHeader header = message.getSOAPHeader(); ``` 3. 创建一个 `javax.xml.namespace.QName` 对象,用于指定认证头名称和命名空间 ``` QName securityQName = new QName("http://schemas.xmlsoap.org/ws/2002/12/secext", "Security", "wsse"); ``` 4. 创建一个 `javax.xml.soap.SOAPHeaderElement` 对象,并将其添加到 `SOAPHeader` 中 ``` SOAPHeaderElement securityHeader = header.addHeaderElement(securityQName); ``` 5. 创建一个 `org.w3c.dom.Element` 对象,用于指定认证信息 ``` DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder builder = dbf.newDocumentBuilder(); Document doc = builder.newDocument(); Element auth = doc.createElementNS("http://schemas.xmlsoap.org/ws/2002/12/secext", "UsernameToken"); Element username = doc.createElementNS("http://schemas.xmlsoap.org/ws/2002/12/secext", "Username"); username.setTextContent("your_username_here"); Element password = doc.createElementNS("http://schemas.xmlsoap.org/ws/2002/12/secext", "Password"); password.setTextContent("your_password_here"); auth.appendChild(username); auth.appendChild(password); ``` 6. 将认证信息添加到 `SOAPHeaderElement` 中 ``` securityHeader.addChildElement(auth); ``` 7. 发送 SOAP 请求并接收响应 您可以使用 Java 提供的各种 Web Service 客户端框架(如 JAX-WS 或 Apache CXF)来发送 SOAP 请求。在发送请求时,将 `SOAPMessage` 对象作为参数传递即可。 上述步骤仅提供了一个基本的示例,您可能需要根据您的具体情况进行一些修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值