SoapExtension 1.0 的问题与解决

别再只用GPS了!用Android手机传感器实现室内步行轨迹记录(避坑指南) 本文详细介绍了如何利用Android手机传感器(如加速度计、陀螺仪和磁力计)实现室内步行轨迹记录,克服GPS在室内的局限性。通过传感器数据采集、步态检测、航向估计和轨迹绘制等步骤,结合避坑指南和优化技巧,帮助开发者高效构建室内定位应用。 阅读详情

前言
====
  在最近的工作中需要对 Web Service 的传输内容进行加密和数字签名,我使用 SOAP 扩展来更改 SOAP 消息的方式来进行加解密,这样就无需对原有的程序进行代码改进就可达成安全传输的目的。

思路
====
  我的设计思路是:客户端程序通过配置文件来通知继承自 SoapExtension 的加解密类是否需要加密发送的消息,并在该 Soap 消息中自动新增一个扩展的 Soap 消息头,用其表示该 Soap 消息包是否经过加密。当服务器接受到该 Soap 消息包时,先提取该扩展 Soap 消息头,并根据其指定的加密状态来决定是否需要进行签名验证和解密处理。服务器返回消息时,也将根据获取的客户端的加解密要求来决定是否对反馈信息进行加密和签名。这样,就可以由每个客户端自行根据其安全需要来决定是否需要使用加密处理,服务器将自动根据每个接受的消息进行解密判断,各客户端可独立行使各自独立的安全级别而不影响到其他的使用者。

过程
====
  在 SoapExtension 中是通过重写其 ProcessMessage 方法来实现对每次收发 Soap 消息的处理的。在该方法唯一的 SoapMessage 类型的参数中包含一个 Stream 类型的消息流对象,该对象就是收发的 Soap 消息包。

  在每次客户端发送消息前(BeforeSerialize 阶段),根据其配置文件指定的标志来决定是否进行加密,并新增一个扩展 SoapHeader 到当前 Soap 包的消息头列表中,该扩展的 SoapHeader 用来指示接受者该 Soap 包是否经过加密和数字签名。在 AfterSerialize 阶段就根据指示对 Soap 消息包进行加密。服务器端,在 BeforeDeserialize 阶段,先获取扩展 SoapHeader 对象,根据其指示来决定对接收到的 Soap 消息包进行解密。

解决
====
  该方案忽略了一个事实,那就是 SoapHeader 是处在 Soap 消息包中的,如果对整个 Soap 消息包进行加密,则无法在解密整个 Soap 消息之前先获得 SoapHeader,不过,这并不妨碍该方案的实施。

  第一,不要加密整个 Soap 消息包,而只加密 Soap 消息包的主体(Body)部分;
  这个解决办法有个不好的地方就是不能对 SoapHeader 进行保密,故此,最好不要用 SoapHeader 来保存和传输机要数据。

  第二,还是加密整个 Soap 消息包,只不过是使用自定义的 HttpHeader 来标示当前附带的 Soap 消息包的加密状态。
  这种解决方案的不足之处是依赖于特定的传输层协议。当然,也可以自定义一种格式,将指示消息包加密状态的标识放在消息主体中,在接收到该消息包时,先解析其指示值后再进行后续操作。

  我使用的是第二种解决方案(即 使用 HTTP 标头来标识 Soap 消息包的加密状态)。这在 SoapExtension 中遇到了个麻烦,因为 SoapExtension 并没有提供给扩展实现者处理本次 Http 会话消息头的机会/方法。在 SoapMessage 中有个 ContentType[String] 属性,用以获取或设置 SOAP 请求或 SOAP 响应的 HTTP Content-Type(默认为 text/xml),噫~ 正好可以用它来表示 Soap 消息包的加密状态,虽然 MSDN  不建议更改它。用 LoadRunner 侦测 Soap 消息,发现其值为“text/xml charset=utf-8;”,将其更改为“text/xml charset=utf-8; isCryptograph=True”后发现整个 Soap 消息的字符编码出现错误,接收者获取的内容完全变成了乱码,不过在 .NET Framework 1.1 中则无该问题,当然,如果是在 .NET Framework 1.1 中建议使用 ContentEncoding 属性来扩展自己的标识,可惜在 1.0 中没有提供该属性 :-(

  最后,在 .NET Framework 1.0 的架构中,使用在客户端和服务端的配置文件来指示是否对 Soap 消息包进行加解密,不过,这样就必须保持客户端和服务端对配置标志的一致性。唉~



后记:在客户端和服务端的 BeforeDeserialize 阶段中 SoapMessage.Stream 对象的 CanSeek 属性是不同的(服务端该 CanSeek 为 False),对于这点要小心处理,对此我甚为不解!





 相关文章:《安全之道:加密与数字签名》

基于YOLOv8n的FPGA无PS端PL部署完整实现方案 本文提出了一种将YOLOv8n目标检测模型完整部署到FPGA纯PL端的实现方案。通过PyTorch训练和INT8量化技术,结合Vitis AI工具链,将模型转换为适合FPGA实现的硬件描述。方案详细阐述了从模型训练、量化校准到FPGA硬件设计的全流程,重点解决了无PS端部署的架构设计、资源优化和实时性保障等关键技术挑战。实验结果表明,该方案在Xilinx Virtex-690T FPGA上实现了30FPS以上的实时目标检测性能,为边缘计算场景提供了高效的硬件加速解决方案。 阅读详情

相关推荐

用VSCode远程开发Jetson小车:告别Jupyter,在本地IDE高效调试Rosmaster Python程序

本文详细介绍了如何利用VSCode的Remote-SSH扩展在本地IDE中高效开发Jetson小车的Rosmaster Python程序。通过配置远程开发环境、调试技巧和项目管理方法,开发者可以告别Jupyter Notebook的碎片化编码,实现完整的机器人控制程序开发,显著提升工作效率。

weixin_30652491的博客 476

Web Service 中的SoapExtension 学习

 在.Net 中我们可以利用SoapExtension 对Web Service 中的Soap 消息进行处理,如加密信息,将请求保存到日志文件等。     我在网上搜了很久都没能找到能将SoapExtension 讲的透彻的文章。特别是两个流的关系问题。根据实验,我得到了如下结论,如不正确请大家指正:1.SoapExtension  类    要实现Soap 扩展就必须继承这个类,并实

nickfeifei的专栏 1490

量化交易新手必看:如何用vnpy+Tushare轻松获取A股历史数据(附完整代码)

本文为量化交易新手提供了使用vnpy和Tushare构建A股历史数据获取系统的完整指南。通过详细的代码示例,手把手教你搭建环境、封装数据获取引擎,并实现日线等数据的格式转换与本地存储,为策略回测与分析奠定坚实的数据基础。

weixin_29098117的博客 378

关于WebService中SOAP扩展求助~~

最近整了个WebService的SOAP扩展,遇到了问题,网上找了很久,没找到一个好的方法。想到园子里肯定高手如云,特来此求助~! 情况是这样的: 我有一个WebService,在没加SOAP扩展前是可以访问的。代码如下: [WebService(Namespace="http://tempuri.org/")] [WebServiceBinding(ConformsTo=WsiP...

weixin_30493321的博客 164

Mac无管理员权限安装NVM全攻略(附国内镜像加速)

本文详细介绍了在Mac电脑无管理员权限的情况下,如何通过Git克隆方式安装Node版本管理工具NVM,并配置国内镜像源以加速下载。攻略涵盖环境检查、安装步骤、Shell环境变量配置、镜像加速设置以及常用命令和常见问题解决方案,帮助开发者绕过权限限制,高效管理Node.js版本。

weixin_29296241的博客 489

微信PC端Multi文件夹数据库解析:语音消息导出与转换实战指南

本文提供了一份详细的微信PC端语音消息导出与转换实战指南。通过解析Multi文件夹中的MediaMSG数据库,指导用户定位、解密数据库,并利用Python脚本精准提取SILK格式语音,最终转换为通用的WAV或MP3格式,实现个人语音数据的本地备份与处理。

garlic的博客 582

Soap扩展调用顺序原理分析

Soap扩展调用顺序原理分析最近学习了一下WebService的Soap扩展开发,在学习时我发现最大的问题是不同优先级的SoapExtension的调用顺序以及chainStream方法的用途,我们知道SoapMessage具有一个Stream属性,那么为什么我们不能在SoapExtension的ProcessMessage中直接操作这个Stream呢,例如你的代码可能会是这个样子:pub

Zfrong繁荣的IT技术、IT项目、解决方案专栏Blog-上海 1789

RK3568平台(USB篇)USB Gadget 驱动

USB 设备驱动,按照设备端关联的 USB 控制器 是工作在 主模式 还是 从模式,分为 USB 设备主机侧驱动 (主模式),或者 USB 设备从机侧驱动 (从模式)。同时,工作在 主模式 的 USB 控制器,称为 USB 主机控制器 (UHC: USB Host Controller),工作在 从模式 的 USB 控制器,称为 USB 设备控制器 (UDC: USB Device Controller)。有的 USB 控制器,只能工作在 主模式 或 从模式 中的某一种;

weixin_49303682的博客 1438

.net关于soap处理

 aspx有httpmodel,httphandle这些东西来预处理asmx,webservice用什么呢SoapExtensionmsdn的原文 .NET Framework 开发员指南  

zb219的专栏 5418

SpringBoot + MyBatis-Plus 高效实现数据变更记录:从注解到通用审计方案(附源码)

*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志*/@Component@Resource/*** 拦截SQL执行*/@Override/*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志/*** 拦截SQL执行。

2601_94871597的博客 558

GEPA_AIME教程:使用GEPA优化数学问题求解的完整指南

本教程展示了如何使用DSPy框架中的GEPA(Generative Evolutionary Prompt Adaptation)优化器来提升大语言模型在数学竞赛问题(AIME)上的表现。# 创建基础的链式思考程序"""带有详细反馈的评估指标,为GEPA提供学习信号"""try:# 处理解析错误feedback_text = f"最终答案必须是一个有效的整数。你回答了'

步子哥的博客 1386

利用SOAP扩展开发WebService(PHP)

PHP实现WebService,它作为一种扩展存在于PHP中。php官方的SOAP扩展,优势是用c开发,相比nusoap效率上较优。 SoapServer类和SoapClient类有两种操作模式:WSDL模式和non-WSDL模式。 ……然后利用Zend Studio将此php类文件生成WSDL文件。

painstaker的专栏 5051

如何解决Dify重新部署(升级到最新版)后出现的Setup failed: PermissionDenied等问题

重新部署(升级)Dify后遇到Permission denied错误?🚫 本文详细分析了这个问题的原因🔐,并提供了完整的解决步骤来修复这个问题✨

XiaoqiangClub的博客 1653

使用soapextension技术

Compressing text is a procedure that can reduce the size of content representation up to 80%. This means that compressed text can be stored using 80% less space than uncompressed text. It also means t

GoodSpeed的专栏 1885

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

webservice---SoapExtensionAttribute和SoapExtension

SoapExtension和SoapExtensionAttribute两个类用于控制webservice序列化和反序列化的一般过程,可对webservice进行压缩和日志等功能进行控制,关于对整个webservice传输的wsdl进行压缩的功能我没做过,不过下周有时间应该会先试试 SoapExtensionAttribute类: public class ExtensionAttribute...

weixin_34149796的博客 294

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

无侵入方面编程-用HttpModule+SoapExtension监视页面执行参数(一)

先简单介绍一下项目吧,我们这个项目是用VS2003开发的,老早一个项目。WEB前端机+业务处理(WebService层)+数据库分别布置在不同的计算机上。 现在老总有一个需求,要统计出每个页面的执行时间,以及每次调用过哪些WebService方法,调用的时间等参数。 可行的方案有好多,但我感觉使用HttpModule+SoapExtension,可以不在改变目标系统源码...

weixin_30455067的博客 91

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

webservice 参数太大_webservice传输数据量较大的情况的解决方案

classCompressSoapExtension:SoapExtension{//////旧流///privateStream_originStream=null;//////新流///privateStream_newStream=null;publicoverrideStreamChainStream(Streamstream){this._originStream=strea...

weixin_39572972的博客 490

深入解析SOAP消息自定义处理:ProcessBody()方法在Web服务集成中的应用

在Web服务架构中,SOAP协议作为企业级系统间通信的重要标准,其消息处理机制是服务集成的核心。SOAP消息体(Body)承载了具体的业务数据,标准的XML反序列化流程通常基于WSDL契约进行。然而,在实际的异构系统集成场景中,常会遇到非标准XML格式、混合内容负载或需要预处理(如解密、验签)等需求,此时标准的处理流程往往无法满足。自定义消息处理程序通过拦截并操作原始的SOAP消息流,为解决这些问题提供了底层技术方案。其核心原理是在消息反序列化前,通过特定的钩子方法(如ProcessBody())直接访问和

aizexi2652的博客 424

winform 客户端调用SoapExtension的方法

using System; using System.Web.Services; using System.Web.Services.Protocols; using System.IO; namespace SunLibrary.Web { /* **********服务器端配置********** 在WebService项目中,增加So...

weixin_30929011的博客 140

WebService的AOP & 简单事务控制

WebService一般都是走HTTP, 一般通过HttpModule拦截就可以。但是要自行编码解码,很难得到详细信息。而且WebMethod抛出的Exception被包装过,不能象普通页面一样通过Context.Error直接拿到它的错误。WebService没有直接继承CBO,要想实现AOP性质的WebMethod拦截和处理,可以通过SoapExtension(Soap扩展)Soap扩展要继承...

weixin_34162228的博客 395

IMG height394 alt一张名为SoapExtWizJPG的图片hspace15 srchttpradioweblogscom0108971images2002101...

It's a 0.1 version! Don't expect miracles! 这是0.1版本! 不要指望奇迹! Here's the C# wizard for ASP.NET Soap Extensions. 这是ASP.NET Soap Extensions的C#向导。 What works: It'll generate a compiling SoapExtension tha...

137

统计WebService的调用者、调用函数、运行时间

系统WebServic分布太久了, 都不知道哪些系统在用? 调用的哪些函数?于是乎,写一个Soap Extension, 再加一个页面,来查询一下。 先看一下配制说明,和效果 web.config中 <system.web> <compilation debug="true" targetFramework="4.0" /> ...

weixin_30677475的博客 86
上一篇: 对黑洞的疑惑
下一篇: 我对J2EE和.NET的一点理解
SW515
博客等级 码龄26年 12粉丝 56原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值