J'utilise la politique de sécurité usernameToken pour sécuriser un webservice de savon. Je ne veux pas que le client envoie le nom d'utilisateur/mot de passe sur chaque demande. Est-il possible de rendre le webservice statefull? ServerPasswordCallback est actuellement appelé pour chaque requête.webservice SOAP Nom d'utilisateurToken CXF n'envoie pas de nom d'utilisateur/mot de passe pour chaque requête
Voici mon code:
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");
}
}
}
Avez-vous un exemple de SecurityPolicy avec IncludeToken to Once? Je suis vraiment surpris de ne pas trouver un exemple de projet utilisant ce mécanisme, ceci est une exigence courante lorsque vous authentifiez un utilisateur en utilisant une base de données. –