如何使用gSoap生成带WS-Security支持的头文件及源码?
正确生成带WS-Security基础认证支持的gSOAP服务端源码步骤
一、修正wsdl2h命令(引入WS-Security定义)
原命令未启用WS-Security支持,需添加-w参数自动引入相关命名空间与类型:
/c/Users/sultan/.conan2/p/b/gsoapfb40d333bc97e/b/build/Debug/wsdl2h.exe -s -w -o sdp_service_multi.h SdpServiceMulti.wsdl
若出现WS-Security定义找不到的情况,手动指定gSOAP的import目录:
/c/Users/sultan/.conan2/p/b/gsoapfb40d333bc97e/b/build/Debug/wsdl2h.exe -s -w -I C:\\Users\\sultan\\.conan2\\p\\b\\gsoapfb40d333bc97e\\b\\src\\gsoap\\import -o sdp_service_multi.h SdpServiceMulti.wsdl
-w:开启WS-Security支持,自动关联WS-Security相关标准定义-s:禁用STL依赖(保持原参数不变)
二、修正soapcpp2命令(生成WS-Security服务端代码)
原命令缺少启用WS-Security的编译宏,且参数需匹配服务端需求:
/c/Users/sultan/.conan2/p/b/gsoapfb40d333bc97e/b/build/Debug/soapcpp2.exe -SL -DWITH_WSSE -I C:\\Users\\sultan\\.conan2\\p\\b\\gsoapfb40d333bc97e\\b\\src\\gsoap\\import;C:\\Users\\sultan\\.conan2\\p\\b\\gsoapfb40d333bc97e\\b\\src\\gsoap\\custom sdp_service_multi.h
-SL:生成服务端代码及库文件(替换原-CL的客户端参数,若需同时生成客户端可改为-CSL)-DWITH_WSSE:强制启用WS-Security模块,生成认证相关的处理代码- 确保路径分隔符在Windows环境下使用
;,且指向正确的gSOAP import/custom目录
三、服务端代码中启用基础认证逻辑
生成源码后,需在服务端初始化WS-Security上下文并设置认证回调:
struct soap *soap = soap_new(); // 初始化WS-Security环境 soap_wsse_init(soap); // 绑定用户名密码校验回调 soap->fvalidate = validate_credentials;
实现自定义校验函数示例:
int validate_credentials(struct soap *soap, const char *username, const char *password) { // 替换为你的实际认证逻辑 if (!strcmp(username, "your_user") && !strcmp(password, "your_pass")) { return SOAP_OK; } // 认证失败返回对应错误码 return SOAP_AUTHENTICATION; }
报错排查要点
- 确认gSOAP版本≥2.8.10,低版本不支持WS-Security完整特性
- 检查import目录下是否存在
wsse.h、wsu.h等WS-Security标准头文件 - 若WSDL未包含WS-Security命名空间,需手动在生成的
sdp_service_multi.h顶部添加:
#import "wsse.h"
内容的提问来源于stack exchange,提问作者Timur Dmitrievich
相关产品推荐
相关产品推荐

