.net 客户端调用java或.net webservice进行soapheader验证java
最近项目中有业务须要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader。web
借此机会,顺便整理一下调用.net webservice 和 java webservice 的验证方式,记录下来。spring
.net端web服务安全
1.若web服务是采用.net webservice实现,以下代码:服务器
/// </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 externalWebService : System.Web.Services.WebService { public WebServiceSecurityHeader webServiceSecurityHeader = new WebServiceSecurityHeader(); BizTcmCmdrugsOrg bizTcmCmdrugsOrg = new BizTcmCmdrugsOrg(); [WebMethod,SoapHeader("webServiceSecurityHeader")] public string HelloWorld(string name) { if (SecurityValidate()) { return "安全的服务: " + name; } else { return "对不起,无权访问!"; } } private bool SecurityValidate() { if (webServiceSecurityHeader.SecurityKey == null) { return false; } if (webServiceSecurityHeader.SecurityKey.Equals("123")) { return true; } else { return false; } }
2. java环境,webservice采用cxf 实现:测试
JAVA端web服务加密
a.具体 java 端 cxf 的web服务的实现以下图。spa
CXF配置:.net
b.定义拦截器:代理
.net端的webservice代理类和客户端代码:
1.C#引用java的webservice跟引用C#的webservice同样,引用URL就能够使用了,可是C#引用java的webservice不会自动生成soapheader,须要本身添加。
2.创建soapheader类
3. Reference.cs代理类中默认不会生成soapheader相关代码,要手动添加。有个问题,因为reference.cs中的代码是引用web服务时自动生成的,因此你添加了代码后,若从新更新引用的webservice,手工增长的代码会被清除,须要再次添加,这是个坑。
代理方法增长SoapHeader属性
4.客户端调用代码:
上面是.net调用 java web服务进行 soapheader 验证的主要过程,在如下环境中测试经过:
.net环境: win10,vs2015,
java环境:java8,cxf3.1.12,spring boot 1.5.13