【问题标题】:webservice SOAP UsernameToken CXF not send username/password on each requestswebservice SOAP UsernameToken CXF 不在每个请求上发送用户名/密码
【发布时间】:2016-06-12 15:44:56
【问题描述】:

我正在使用 usernameToken 安全策略来保护肥皂网络服务。我不希望客户端在每个请求上发送用户名/密码。是否可以使 web 服务有状态?目前每个请求都会调用 ServerPasswordCallback。

这是我的代码:

ComputeWS.java

@WebService(
    serviceName = "ComputeWS",
    targetNamespace = "http://org.test/compute",
    name = "ComputeWS")
@EndpointProperties(
    value = { @EndpointProperty(key = "ws-security.callback-handler", value = "org.test.ServerPasswordCallback") })
@Policy(placement = Policy.Placement.BINDING, uri = "WSPolicy.xml")
public class ComputeWS {

@WebMethod
public int add(int x, int y) {
    return x * y;
}

}

WSPolicy.xml

<?xml version="1.0" encoding="UTF-8" ?>
<wsp:Policy wsu:Id="WSPolicy" xmlns:wsp="http://www.w3.org/ns/ws-policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:ExactlyOne>
    <wsp:All>
        <sp:SupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
            <wsp:Policy>
                <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                    <wsp:Policy>
                        <sp:WssUsernameToken11/>
                    </wsp:Policy>
                </sp:UsernameToken>
            </wsp:Policy>
        </sp:SupportingTokens>
    </wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>

ServerPasswordCallback.java

public class ServerPasswordCallback implements CallbackHandler {

@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
    WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

    if ("joe".equals(pc.getIdentifier())) {
        pc.setPassword("joespassword"); 
    }
}

}

【问题讨论】:

    标签: java web-services soap cxf usernametoken


    【解决方案1】:

    没有“开箱即用”的方法。您可以将 UsernameToken 的“IncludeToken”策略从“AlwaysToRecipient”更改为“Once”。然后在服务器端,您必须通过诸如 Spring Security 或 Apache Shiro 等实现某种方式来跟踪客户端。

    【讨论】:

    • 您是否有任何使用 IncludeToken to Once 的 SecurityPolicy 示例?我真的很惊讶没有找到任何使用这种机制的示例项目,这是您使用数据库对用户进行身份验证时的常见要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多