web-services - 在 Groovy 中创建 WS-security 标头
问题描述
我必须使用 Groovy 在 SOAP 标头中创建 UsernameToken 部分,但我找不到如何去做。我查看了 WSLite,但我如何理解这个库不能与 WSS 标头一起使用。我需要这样的东西
<wsse:UsernameToken wsu:Id="UsernameToken-1">
<wsse:Username>testuser</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">******</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">/KRqhWHKnB66WVTgZ4GBVg==</wsse:Nonce>
<wsu:Created>2019-02-25T12:50:36.307Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
解决方案
我决定使用 spring ws 模板
compile "org.springframework.ws:spring-ws-security"
它帮助了我
def WebServiceTemplate createWsTemplate(String url, String login, String password) {
Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor()
wss4jSecurityInterceptor.setSecurementActions(WSHandlerConstants.USERNAME_TOKEN)
wss4jSecurityInterceptor.setSecurementUsername(login)
wss4jSecurityInterceptor.setSecurementPassword(password)
wss4jSecurityInterceptor.setSecurementPasswordType("PasswordText")
wss4jSecurityInterceptor.setSecurementUsernameTokenCreated(true)
wss4jSecurityInterceptor.setSecurementUsernameTokenNonce(true)
SaajSoapMessageFactory msgFactory = new SaajSoapMessageFactory(MessageFactory.newInstance())
msgFactory.afterPropertiesSet()
WebServiceTemplate wsTemplate = new WebServiceTemplate(msgFactory)
wsTemplate.setInterceptors(wss4jSecurityInterceptor)
wsTemplate.setDefaultUri(url)
wsTemplate.afterPropertiesSet()
wsTemplate.setMessageSender(sender)
return wsTemplate }
推荐阅读
- c - 如何在打开的文件中查找和替换数据/行
- image - 由于写访问冲突,在 openv 中使用 SURF 失败
- firebase - 如何在 Flutter 中实时监听 Firebase 更新
- c# - How to make a shooting range for guns in unity2D?
- flutter - Listener or rule for flutter_driver tests, to make automatically screenshot, if any one test failed
- python - pandas python 删除组的最后一行
- http - 如何在 Thingsboard 中自动创建多个设备并使用 HTTP Api 发布遥测数据
- r - 如何在R中逐字比较两个字符串
- laravel - Laravel - 如何正确获取具有相同名称的复选框值?
- php - PHP-FPM、Apache 和 mod_alias