java - RAD - 如何在 websphere 应用程序服务器管理控制台中为 JAX-WS 添加用户名令牌
问题描述
我已经使用 JAX-WS 创建了一个 Web 服务,并尝试将 Simple UsernameToken 安全性添加到 Web 服务中。该应用程序部署在 Websphere 8.5 上。
我发现以下链接有助于为基于 JAX-RPC 的 Web 服务很容易地从RAD -> 服务选项卡添加 usernameToken,但相同的功能不适用于JAX-WS类型的 Web 服务。
RAD - 如何在 websphere 应用程序服务器管理控制台中为 JAX RPC 添加用户名令牌
任何人都可以帮助提供一些类似的步骤或其他可能的简单解决方案来为 JAX-WS Web 服务实现相同的目标吗?
<Soapenv:Header>
<wsse:Security soapenv: mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>user</wsse: Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wssusername-token-profile-1.0#PasswordText">paas</wsse: Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
谢谢。
解决方案
最后,我设法找到了解决上述问题的方法。它如下:
在谷歌上搜索了很多之后,我发现了一个Web 服务处理程序的概念,可以分别为从 Web 服务提供者接收或发送的每个请求和响应调用它。
如何配置: 1. 创建一个 Java File SecurityHandler 并在其中粘贴以下代码:
public class SecurityHandler implements SOAPHandler<SOAPMessageContext>
{
@Override
public boolean handleMessage(SOAPMessageContext context)
{
boolean outbound = (Boolean)context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(outbound) {
//logic to handle a response
}
if (!outbound) {
//logic to handle a request
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
}
@Override
public void close(MessageContext context) {}
@Override
public Set<QName> getHeaders() {
return Collections.emptySet();
}
}
使用以下代码示例创建一个 XML 文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <javaee:handler-chains xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <javaee:handler-chain> <javaee:handler> <javaee:handler-class>your.package.path.SecurityHandler</javaee:handler-class> </javaee:handler> </javaee:handler-chain> </javaee:handler-chains>
要激活对您公开的 Web 服务的每个请求或响应的处理程序,请在 Web 服务类中添加注释,如下所示:
@HandlerChain(file="/your/package/path/handler-chain.xml") 公开课我的网络服务{ //要公开的方法或网络服务。 }
推荐阅读
- php - Guzzlehttp\Exception\ConnectionException:cURL 错误 28 在 2851 毫秒后解决超时
- angular - 如何从 LocalStorage 中检索值
- java - 重定向到 Spring Boot 中的不同主机(非 www 到 www URL)
- python - DOIT_SEEK_FILE 有什么用
- ios - 推送通知正在接收,但在 PubNub 聊天消息中发送时后台获取未使用 pn_apns 标签调用有效负载
- c# - 如何使用 LINQ 或 C# 其他方式匹配来自两个数据表的数据具有单行
- react-native - 如何用一个反应组件触发两个功能?
- load-balancing - 如何使用 HA 代理服务器作为负载均衡器
- javascript - 是否有必要提交由 blob 包裹的表单?什么是最佳做法?
- node.js - 为什么发生错误时不执行我的catch块