亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 開(kāi)發(fā) > XML > 正文

構(gòu)建安全的Xml Web Service系列(二)

2024-09-05 20:55:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  上一篇文章地址:構(gòu)建安全的xml web service系列一之初探使用soap頭

  要分析xml web service的安全性,首先要解決的問(wèn)題是我們能了解和清楚soap消息的格式和內(nèi)容,如果獲得不了soapmessage,分析如何能構(gòu)建安全xml web service也就無(wú)從下手,即使分析出來(lái),自己也可能模模糊糊,不能定論。下面就分析下如何獲得soapmessage。

  首先介紹一個(gè)類-soapextension,msdn對(duì)這個(gè)類的備注為:asp.net 允許通過(guò)擴(kuò)展性機(jī)制生成與 soap 相關(guān)的基礎(chǔ)結(jié)構(gòu)。asp.net soap 擴(kuò)展結(jié)構(gòu)以一種擴(kuò)展為中心,該擴(kuò)展可以在客戶端或服務(wù)器上處理消息時(shí)在特定階段中檢查或修改消息。asp.net soap 擴(kuò)展從 soapextension 類派生。getinitializer 和 initialize 方法提供其他可用機(jī)制,用于初始化 soap 擴(kuò)展以增強(qiáng)性能。processmessage 是大多數(shù) soap 擴(kuò)展的核心,原因是該方法在 soapmessagestage 中定義的每一個(gè)階段都被調(diào)用,從而使 soap 擴(kuò)展得以執(zhí)行所需的該特定 soap 擴(kuò)展的行為。對(duì)于需要修改 soap 請(qǐng)求或 soap 響應(yīng)的 soap 擴(kuò)展,chainstream 提供一個(gè)機(jī)會(huì)以接收要通過(guò)網(wǎng)絡(luò)發(fā)送的建議數(shù)據(jù)。 仔細(xì)閱讀這段文字,如果您以前開(kāi)發(fā)過(guò)windows程序,那第一個(gè)應(yīng)該想到的是:原來(lái)web service的處理機(jī)制和windows窗口程序的消息機(jī)制竟然有著一曲同工之妙。下面談?wù)勅绾卫眠@個(gè)類,來(lái)截獲xml web service請(qǐng)求和相應(yīng)的soap消息,從而看看xml web service的廬山真面目。

  首先大家先看看這個(gè)類,這個(gè)類完成的功能是將xml web service通過(guò)擴(kuò)展的方式,將每次的請(qǐng)求和響應(yīng)的soap消息通過(guò)日志的方式保存到文本文件中。日志記錄的方式也有兩種:

  1。針對(duì)每個(gè)webmethod產(chǎn)生一個(gè)日志文件。

  2。針對(duì)每個(gè)webservice產(chǎn)生一個(gè)日志文件

  因?yàn)橐粋€(gè)webservice可能包含一個(gè)或者多個(gè)webmethod,所以如果指定兩種方法都支持的話,那第二個(gè)日志兩面應(yīng)該包括第一個(gè)日志里面的內(nèi)容,而有些情況下,是不需要對(duì)每個(gè)webmethod都進(jìn)行日志記錄的,這時(shí)候采用第一種記錄方式,增強(qiáng)了系統(tǒng)的靈活性。

  下面是擴(kuò)展了的soapextension

<webservices>
        <soapextensiontypes>
          <add type="jillzhang.traceextension,jillzhang" priority="1"  group="high"  />
        </soapextensiontypes>
      </webservices>

可以記錄soapmessage的soapextension

namespace jillzhang
{
    public class traceextension: soapextension
    {
        static readonly string logroot = system.configuration.configurationmanager.appsettings["logroot"];
        stream oldstream;
        stream newstream;
        string filename;
       /// <summary>
       /// 將請(qǐng)求流和響應(yīng)流存到內(nèi)存流中,已被調(diào)用
       /// </summary>
        /// <param name="stream">包含 soap 請(qǐng)求或響應(yīng)的內(nèi)存緩沖區(qū)</param>
        /// <returns>它表示此 soap 擴(kuò)展可以修改的新內(nèi)存緩沖區(qū)。</returns>
        public override stream chainstream(stream stream)
        {
            oldstream = stream;
            newstream = new memorystream();
            return newstream;
        }
        /// <summary>
        /// 在xml web service第一次運(yùn)行的時(shí)候,一次性的將通過(guò)traceextensionattribute傳遞進(jìn)來(lái)的
        /// 保存日志信息的文件名初始化
        /// </summary>
        /// <param name="methodinfo">應(yīng)用 soap 擴(kuò)展的 xml web services 方法的特定函數(shù)原型</param>
        /// <param name="attribute">應(yīng)用于 xml web services 方法的 soapextensionattribute</param>
        /// <returns>soap 擴(kuò)展將對(duì)其進(jìn)行初始化以用于緩存</returns>
        public override object getinitializer(logicalmethodinfo methodinfo, soapextensionattribute attribute)
        {
            return ((traceextensionattribute)attribute).filename;
        }
        /// <summary>
        /// 替代為每個(gè)方法配置的保存soapmessage文件名,而是將整個(gè)網(wǎng)絡(luò)服務(wù)
        /// 的soapmessage都保存到一個(gè)日志文件中,這個(gè)文件路徑需要在web service
        /// 的配置文件中web.config指出,如
        /// <appsettings>
        ///  <add key="logroot" value="c://servicelog"/>
        /// </appsettings>
        /// </summary>
        /// <param name="webservicetype">網(wǎng)絡(luò)服務(wù)的類型</param>
        /// <returns>用于保存日志記錄的文件路徑</returns>
        public override object getinitializer(type webservicetype)
        {
            //return logroot.trimend('//') + "http://" + webservicetype.fullname + ".log";
            return logroot.trimend('//')+"http://"+ webservicetype.fullname + ".log";
        }
        //獲得文件名,并將其保存下來(lái)
        public override void initialize(object initializer)
        {
            filename = (string)initializer;
        }
       /// <summary>
       /// 當(dāng)數(shù)據(jù)還為soap格式的時(shí)候,將數(shù)據(jù)寫入日志
       /// </summary>
       /// <param name="message"></param>
        public override void processmessage(soapmessage message)
        {
            switch (message.stage)
            {
                case soapmessagestage.beforeserialize:
                    break;
                case soapmessagestage.afterserialize:
                    writeoutput(message);
                    break;
                case soapmessagestage.beforedeserialize:
                    writeinput(message);
                    break;
                case soapmessagestage.afterdeserialize:
                    break;
                default:
                    throw new exception("invalid stage");
            }
        }
        /// <summary>
        /// 將soapmessage寫入到日志文件
        /// </summary>
        /// <param name="message"></param>
        public void writeoutput(soapmessage message)
        {
            newstream.position = 0;
            //創(chuàng)建或追加記錄文件
            filestream fs = new filestream(filename, filemode.append,
                fileaccess.write);
            streamwriter w = new streamwriter(fs);
            string soapstring = (message is soapservermessage) ? "soap響應(yīng)" : "soap請(qǐng)求";
            w.writeline("-----" + soapstring + " 在 " + datetime.now.tostring("yyyy年mm月dd日 hh時(shí)mm分ss秒"));
            w.flush();
            copy(newstream, fs);
            w.close();
            newstream.position = 0;
            copy(newstream, oldstream);
        }

        public void writeinput(soapmessage message)
        {
            copy(oldstream, newstream);
            filestream fs = new filestream(filename, filemode.append,
                fileaccess.write);
            streamwriter w = new streamwriter(fs);

            string soapstring = (message is soapservermessage) ?
                 "soap請(qǐng)求" : "soap響應(yīng)";
            w.writeline("-----" + soapstring +
                " 在 " + datetime.now.tostring("yyyy年mm月dd日 hh時(shí)mm分ss秒"));
            w.flush();
            newstream.position = 0;
            copy(newstream, fs);
            w.close();
            newstream.position = 0;
        }
        /// <summary>
        /// 拷貝流到流
        /// </summary>
        /// <param name="from"></param>
        /// <param name="to"></param>
        void copy(stream from, stream to)
        {
            textreader reader = new streamreader(from);
            textwriter writer = new streamwriter(to);
            writer.writeline(reader.readtoend());
            writer.flush();
        }
    }
    //創(chuàng)建一個(gè)用于在webmethod上使用的soapextension屬性
    [attributeusage(attributetargets.method)]
    public class traceextensionattribute : soapextensionattribute
    {
        private string filename = "c://log.txt";
        private int priority;
        /// <summary>
        /// 擴(kuò)展類型
        /// </summary>
        public override type extensiontype
        {
            get { return typeof(traceextension); }
        }
        /// <summary>
        /// 優(yōu)先級(jí)
        /// </summary>
        public override int priority
        {
            get { return priority; }
            set { priority = value; }
        }
        /// <summary>
        /// 用于記錄該webmethod的soapmessage的文件的絕對(duì)路徑
        /// 默認(rèn)為c://log.txt;
        /// </summary>
        public string filename
        {
            get
            {
                return filename;
            }
            set
            {
                filename = value;
            }
        }
    }  
}

  結(jié)下來(lái),介紹一個(gè)如何使用該類:

  如果要使讓traceextension支持第一種記錄方式,需要作的額外工作為:

  只需要在要記錄soapmessage的webmethod添加如下的attribute

  [traceextension(filename="d://data.xml",priority=0)]

  當(dāng)然路徑,您可以自己設(shè)定

  前一節(jié)的webmethod就變成了

添加了針對(duì)webmethod日志記錄的webmethod
public mysoapheader header = new mysoapheader();       
        [webmethod]
        [soapheader("header")]  
        [traceextension(filename="d://data.xml",priority=0)]
        public string helloworld()
        {
            if (header == null)
            {
                return "您沒(méi)有設(shè)置soapheader,不能正常訪問(wèn)此服務(wù)!";
            }
            if (header.username != "jillzhang" || header.pwd != "123456")
            {
                return "您提供的身份驗(yàn)證信息有誤,不能正常訪問(wèn)此服務(wù)!";
            }
            return "hello world";
        }
 
  調(diào)用下該webservice,便在d盤產(chǎn)生一個(gè)data.xml文件,里面的內(nèi)容為:

-----soap請(qǐng)求 在 2007年05月25日 09時(shí)06分29秒
<?xml version="1.0" encoding="utf-8"?><soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema"><soap:header><mysoapheader xmlns="jillzhang123456http://tempuri.org/"><username>jillzhang</username><pwd>123456</pwd></mysoapheader></soap:header><soap:body><helloworld xmlns="http://tempuri.org/" /></soap:body></soap:envelope>
 
 
 
-----soap響應(yīng) 在 2007年05月25日 09時(shí)06分29秒
<?xml version="1.0" encoding="utf-8"?><soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema"><soap:body><helloworldresponse xmlns="hello'>http://tempuri.org/"><helloworldresult>hello world</helloworldresult></helloworldresponse></soap:body></soap:envelope>

  如何采用第二種方法,讓webservice的每個(gè)webmethod都能記錄日志

  需要在web.config中作如下的設(shè)定

  首先添加如下節(jié)點(diǎn)

<webservices>
        <soapextensiontypes>
          <add type="jillzhang.traceextension,jillzhang" priority="1"  group="high"  />
        </soapextensiontypes>
      </webservices>

  然后通過(guò)配置設(shè)定日志文件保留的路徑:

<appsettings>
    <add key="logroot" value="d:"/>
  </appsettings>

  找到日志文件,里面也赫然有著soapmessage的真面目。通過(guò)以上方法,大家可以清晰地分析到soapmessage的具體格式和內(nèi)容,知道了這個(gè)以后,對(duì)付web service,您就可以隨心應(yīng)手,隨心所欲,如果你愿意,你甚至也可以“強(qiáng)奸"一次webservice,哈哈!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲乱亚洲乱妇| av三级影院| **亚洲第一综合导航网站| 亚洲一卡2卡三卡4卡2021四卡| 国产一级黄色片免费| wwwwxxxx在线观看| 久久久精品久久| 成av人免费青青久| 3d精品h动漫啪啪一区二区| 中文字幕欧美精品在线| 亚洲 欧美综合在线网络| 亚洲精品**中文毛片| 国产欧美一区二区三区精品酒店| 97人人模人人爽人人喊中文字| 国产一区二区三区免费观看在线| 国产一区视频导航| 国产成都精品91一区二区三| 中文字幕男人天堂| 中文字幕在线日韩| 91国产视频在线播放| 夜夜躁狠狠躁日日躁2021日韩| 久草成色在线| 一级黄色片毛片| 狠狠干狠狠久久| 色婷婷免费视频| 成人综合久久| 国产亚洲欧美日韩高清| 亚洲激情中文| 国产一区二区香蕉| 秘密基地免费观看完整版中文| **精品中文字幕一区二区三区| 国产三级av片| 日韩欧美中文字幕电影| 精品国内一区二区三区免费视频| 国产精品久久久久久久久久齐齐| 97超碰人人模人人人爽人人爱| 美女福利视频一区| 91精品国产成人观看| 一区二区三区四区日韩| 久久国产夜色精品鲁鲁99| 欧美一级黄色录像片| 91xxx在线观看| 欧美丰满嫩嫩电影| 97人人做人人爽香蕉精品| 粉嫩一区二区| 日本精品一区在线观看| 最新国产一区二区| 夜夜操免费视频| 亚洲不卡av不卡一区二区| 这里只有久久精品视频| 欧美精品少妇videofree| 久久99蜜桃综合影院免费观看| 97人人爽人人喊人人模波多| 成人欧美精品一区二区| 亚洲网在线观看| 欧美一区二区啪啪| 亚洲欧美一二三区| 男人天堂2024| 国产主播在线资源| 久久影院模特热| 蜜桃传媒一区二区亚洲| 亚洲成人久久电影| 亚洲成a人v欧美综合天堂麻豆| 国产三级生活片| julia中文字幕久久亚洲蜜臀| 国产精品第八页| 成人自拍视频网站| av成人动漫在线观看| 久久免费视频3| 亚洲777理论| 97激碰免费视频| 日韩欧美国产黄色| 777午夜精品免费视频| 亚洲第一页在线播放| 97精品在线观看| 国产一级久久久久毛片精品| 欧美国产精品v| 国产精品中文字幕欧美| 亚洲香肠在线观看| 黄色在线论坛| 在线观看高清av| 1313精品午夜理伦电影| 欧美日韩aaaaa| 少妇高潮久久久久久潘金莲| 欧美理论片在线| 99久久婷婷国产综合精品电影√| 国产剧情麻豆剧果冻传媒视频免费| 日韩在线观看免费高清| 日韩精品――中文字幕| 97免费在线观看视频| 国产在线a不卡| 欧美在线三级| 色播五月综合| 国产精品一区二区三区精品| 欧美一级在线观看| aa视频在线免费观看| 天天做夜夜操| 91免费观看在线| 欧美精品在线免费| 黄瓜视频18免费观看| www.成年人视频| 欧美一区二区三区免费视频| a级在线免费观看| 国产成人亚洲综合| 免费观看羞羞视频网站| 97伦理在线四区| 精品一区二区三区免费播放| 成人免费在线网址| 这里只有久久精品| 久久久久久久久久久久久久国产| 2020久久国产精品| 国产精品老牛影院在线观看| 一级做a爰片久久毛片美女图片| 在线观看国产精品网站| 同性视频网站免费男| 午夜激情在线观看| 日韩欧美一区二区三区免费观看| 青草视频在线播放| 日韩在线视频观看正片免费网站| 99国产精品一区| 中文字幕亚洲情99在线| 亚洲精品乱码久久久久久蜜桃91| 久久久久久网| 亚洲第一在线综合网站| 水蜜桃在线免费观看| 亚洲成人精品视频在线观看| 色婷婷亚洲十月十月色天| 先锋影音欧美| 久久高清免费| 狠狠躁天天躁日日躁欧美| aa亚洲婷婷| 黑人巨大精品欧美一区二区桃花岛| 97人妻人人揉人人躁人人| 青春草免费视频| 神马电影网我不卡| 国产在视频线精品视频| 天天操综合520| av黄色免费在线观看| 免费99视频| 91在线国产剧情| 精品午夜福利在线观看| 最新精品国产| 欧美色网一区二区| 亚洲av成人片无码| 狠狠干夜夜爽| 精品一区二区无码| av在线女优影院| 亚洲精品国产一区二区三区| 久久久www免费人成黑人精品| 日韩不卡一区二区三区| 亚洲国产精品成人一区二区在线| 亚洲欧美激情视频在线观看一区二区三区| 免费av网站在线看| 国产亚洲色婷婷久久99精品| jizz在线免费播放| 国产福利精品视频| 丁香一区二区三区| 九九精品在线视频| 国产又粗又猛大又黄又爽| 1234区中文字幕在线观看| 欧美精品一区二区视频| 少妇在线看www| 日韩三级av| 国产精品v片在线观看不卡| 在线视频精品| 欧美日韩一区二区三区视频| 亚洲宅男网av| 美女日韩一区| www.日韩高清| 一本久道久久综合无码中文| 不卡的av电影| 国产真人做爰视频免费| 国产盗摄xxxx视频xxx69| 最新地址在线观看| 三级在线观看一区二区| 国产精品99久久免费观看| 加勒比海盗1在线观看免费国语版| 欧美日韩高清在线一区| 鲁片一区二区三区| 欧美人体做爰大胆视频| 欧美成人vr18sexvr| 二吊插入一穴一区二区| 波多野结衣高清视频| 在线观看精品一区二区三区| 久久久精品视频在线| 中文字幕在线播放一区二区| 麻豆av在线导航| 亚洲欧洲精品一区| 亚洲国产综合在线| 欧美精品色婷婷五月综合| 国内精品久久国产| 欧美精品电影免费在线观看| 折磨小男生性器羞耻的故事| 欧美无乱码久久久免费午夜一区| ...av二区三区久久精品| 亚洲网在线观看| 亚洲精品精选| 青青草华人在线视频| 精品久久精品久久| 亚洲男同1069视频| 欧美三级情趣内衣| 亚洲人成电影在线观看网| 黄色在线观看www| 日韩成人在线免费观看| 国产精品色呦| 国产精品传媒| 日本三级在线播放完整版| 制服丝袜亚洲网站| www.激情网| 亚洲欧美小说色综合小说一区| 欧美色综合一区二区三区| 亚洲黄色免费| 国产夫妻在线| 首页综合国产亚洲丝袜| 久久超碰97中文字幕| 国产精品久久久久久久久夜色| 国产精品久久久久aaaa九色| 黄网网址免费| 搞黄网站在线看| 国产女主播一区二区三区| 四虎.com| 超碰97人人在线| 久久精品日韩无码| 全色精品综合影院| 最近中文字幕一区二区三区| **欧美大码日韩| 青娱乐国产在线| 国产精品午夜免费| 久草在线综合| 波多野结衣视频网址| 亚洲成人18| 国产精品qvod| 黄色片在线免费观看| 精品久久久久久久久久久久久久久久久| 日本xxxxxwwwww| 黄色片网站免费| 国产精品久久久久免费| 国产又粗又猛又爽又黄的网站| 亚洲视频1区2区| 亚洲精品中文字幕乱码| 国产精品亚洲欧美一级在线| 免费动漫网站在线观看| 极品销魂一区二区三区| 中文字幕伦理免费在线视频| 91短视频版在线观看www免费| 四虎影视最新网站入口在线观看| 青青草免费在线视频观看| 91夜夜揉人人捏人人添红杏| 在线手机中文字幕| 少妇一级淫片免费放中国| 丝袜在线视频| 日韩另类视频| 无码人妻丰满熟妇啪啪网站| 亚洲免费国产| 波多野结衣一区二区三区在线观看| 中文字幕中文字幕中文字幕亚洲无线| 网站黄在线观看| 成人羞羞国产免费图片| 久艹视频在线观看| 日本大片在线观看| 国产福利在线播放麻豆| 中文字幕精品无码亚| 欧美极度另类videos高清| 国产女女做受ⅹxx高潮| 欧美日韩视频在线观看一区二区三区| japanese23hdxxxx日韩| 亚洲欧美在线一区| 最新国产在线精品91尤物| 日本a在线观看| 激情久久综合网| 欧美性生交xxxxx久久久| 国产精品激情电影| 日韩精品在线观看免费| 大桥未久在线视频| 亚洲一区二区三区精品视频| youjizz亚洲女人| 免费不卡在线观看av| 五月婷婷六月婷婷| www.五月婷婷| 尤物九九久久国产精品的特点| 亚洲成人一区二区| 一线天粉嫩在线播放| 日本成人免费网站| 日韩av手机在线免费观看| 97精品一区二区视频在线观看| 久久福利毛片| 丁香影院在线| 成人妇女免费播放久久久| 国产男女猛烈无遮挡免费视频| 国产三级视频在线播放| 欧美一级国产精品| 欧美拍拍视频| 最新日韩一区| 在线免费av观看| 国产九九精品视频| 欧美国产专区| 欧美日韩一区二区三区免费| 美女在线不卡| 中国毛片在线观看| 亚洲国产aⅴ成人精品无吗| 粉嫩av懂色av蜜臀av分享| av在线二区| 天天操天天干天天摸| аⅴ天堂中文在线网| 色综合久久网女同蕾丝边| 亚洲伦理在线观看| 91精品国产毛片武则天| freesex欧美| chinese叫床对白videos| 久草在线资源福利| 日本一区二区不卡| 免费网站观看电影入口| 亚洲xxxxx性| 日韩视频一二区| 国内一卡2卡三卡四卡在线| 亚洲第一福利视频| 国产高清精品一区二区| 国产成人综合精品三级| 欧美理论片在线观看| 国产农村妇女精品久久| av日韩亚洲| 午夜伊人狠狠久久| 色综合一区二区| 狠狠入ady亚洲精品经典电影| 在线中文字幕一区二区| 国产精品jizz在线观看老狼| 欧美亚洲精品在线观看| 日韩三级不卡|