webservice安全机制实现方法

今天,抽空研究了一下webservice的安全机制,主要一种方法使用SoapHader来实现。使用SoapHeader可以来控制非法用户对webservice的调用。下面是具体的实现方法。

1:首先我们自定义一个类MySoapHeader,需要继承System.Web.Services.Protocols.SoapHeader 这个类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Services.Protocols;
 6
 7 namespace WebService.Common
 8 {
 9     public class MySoapHeader : SoapHeader
10     {
11
12         public MySoapHeader(string username,string userpwd)
13         {
14             this.username = username;
15             this.userpwd = userpwd;
16         }
17         #region user
18         /// <summary>
19         /// 获取或设置用户名
20         /// </summary>
21         public string username
22         {
23             get { return username; }
24             set { username = value; }
25         }
26         /// <summary>
27         /// 获取或设置用户密码
28         /// </summary>
29         public string userpwd
30         {
31             get { return userpwd; }
32             set { userpwd = value; }
33         }
34
35
36         #endregion
37
38         /// <summary>
39         /// 验证客户端传来的用户信息
40         /// </summary>
41         /// <param name="in_username"></param>
42         /// <param name="in_userpwd"></param>
43         /// <returns></returns>
44         public bool ValideUser(string in_username, string in_userpwd)
45         {
46
47             if (in_username == "admin" && in_userpwd == "admin" )
48             {
49                 return true;
50             }
51             else
52             {
53                 return false;
54             }
55         }
56
57     }
58 }

2:添加webservice,并编写相应的代码

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

/// <summary>
///WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
        public MySoapHeader header; ////定义用户身份验证类变量header
        [WebMethod]
        [System.Web.Services.Protocols.SoapHeader("header")]//用户身份验证的soap头
        public string HelloWorld(string contents)
        {
            //验证是否有权访问
            if (header.ValideUser(header.username, header.userpwd))
            {
                return contents + "调用服务成功";
            }
            else
            {
                return "对不起,您没有权限访问";
            }
        }
}

3:客户端调用。这里我用的是webform写的,大家也可以用别的哈。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplication2.ServiceReference1;
namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            HDSServiceSoapClient test = new HDSServiceSoapClient();
            MySoapHeader heder = new MySoapHeader();
            heder.username = "admin";
            heder.userpwd = "admin";
            Response.Write(test.HelloWorld(heder, "恭喜你:"));
        }
    }
}

好了,这就是所有的方法和代码了,是不是很简单呢。希望大家多多互相帮助!!

原文地址:https://www.cnblogs.com/xing-cheng/p/8806593.html

时间: 2024-10-04 13:53:38

webservice安全机制实现方法的相关文章

php实现网站插件机制的方法

php实现网站插件机制的方法 这些天想作一个在网站中实现插件的功能,谷歌了一下,发现一篇文章感觉对我帮助很大,帖出来和大家分享,废话不多说,直接帖出代码供大家分析. 首先是插件的管理类的实现: 复制代码 代码如下: <? /** * STBLOG PluginManager Class * * 插件机制的实现核心类 * * @package STBLOG * @subpackage Libraries * @category Libraries * @author Saturn * @link

php调用webservice的几种方法

原文:php调用webservice的几种方法 1.WSDL模式: extension = php_soap.dll extension = php_curl.dll extension = php_openssl.dll <?php header("content-type:text/html;charset=utf-8"); $client = new SoapClient("http://url/ooxx.asmx?wsdl"); $param = ar

PHP类的自动加载机制实现方法分析

这篇文章主要介绍了PHP类的自动加载机制实现方法,结合实例形式分析了__autoload方法进行类自动加载操作的相关实现技巧与使用注意事项,需要的朋友可以参考下. 本文实例讲述了PHP类的自动加载机制实现方法.分享给大家供大家参考,具体如下: Test1.class.php <?php class Test1 { public static function test() { echo "hello,world!\n"; } } Test2.class.php <?php

android采用Ksoap2访问webservice,AndroidHttpTransport call方法异常

============问题描述============ 使用java工程以同样的方式去访问webservice没有任何问题,也返回正常的数据,但是在android中执行到call方法的时候就抛出异常,但是异常是null不能去取出正常的数据,代码如下,求各位大神指教一下 ============解决方案1============ 1.应用需要有访问网络的权限. 2. 4.0中不能再主线程中发起网络请求,这个坑我也坑了好久.

java调用webservice接口 几种方法

webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口.今天搜索到了非常好的 webservice provider列表 http://www.webservicex.net/WCF/default.aspx 这上面列出了70多个包括很多方面的free webservice provider,utilities->global weather就

java 多线程8 : synchronized锁机制 之 方法锁

脏读 一个常见的概念.在多线程中,难免会出现在多个线程中对同一个对象的实例变量或者全局静态变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过的.注意这里 局部变量是不存在脏读的情况 多线程线程实例变量非线程安全 看一段代码: public class ThreadDomain13 { private int num = 0; public void addNum(String userName) { try { if ("

WebService 调用三种方法

//来源:http://www.cnblogs.com/eagle1986/archive/2012/09/03/2669699.html 最近做一个项目,由于是在别人框架里开发app,导致了很多限制,其中一个就是不能直接引用webservice . 我们都知道,调用webserivice 最简单的方法就是在 "引用"  那里点击右键,然后选择"引用web服务",再输入服务地址. 确定后,会生成一个app.config 里面就会自动生成了一些配置信息. 现在正在做的

webservice 缓存机制

本文转载:http://blog.csdn.net/zhdd1234/article/details/4555472 WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据缓存 一.输出缓存输出缓存的使用非常简单,比较适用于WebService的参数比较少,结果比较单一的情况,例如股票信息,可以设置5-10秒的缓存,天气预报,则可以设置30分钟甚至数小时的缓存 使用方法是:在WebMethod属性上指定CacheDuration属性即可,例如 这样,600秒内这个WebSer

Jquery调用webService的四种方法

1.编写4种WebService方法 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] //令WebService成功传入Json参数,并以Json形式返回结果 [GenerateScriptType(typeof(Person))] //不是必要,但推荐添加(如果Person里面再嵌套