Salve ho un problema con WS security. Allora ho utilizzato la seguente policy:
codice:
<wsp:Policy wsu:Id="UTOverTransport"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-ssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<sp:SignedSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/wssecuritypolicy/200702">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/wssecuritypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:HashPassword/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SignedSupportingTokens>
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:passwordCallbackClass>org.example.www.classi.PWCBHandler</ramp:passwordCallbackClass>
</ramp:RampartConfig>
</wsp:ExactlyOne>
</wsp:Policy>
e ho scritto la seguente classe java:
codice:
package org.example.www.classi;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;
public class PWCBHandler {
public class PBCBHandler implements CallbackHandler{ //CallbackHandler è l’interfaccia con cui il sistema richiede le credenziali di accesso dell’utente
public void handle(Callback[] callbacks)throws IOException, UnsupportedCallbackException { // Il metodo handle di CallbackHandler riceve in ingresso un array di opportuni callback
for (int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i]; //La classe WSPasswordCallback fornisce il nome di utente
String id = pwcb.getIdentifier(); // Questo metodo restituisce l’username
int usage = pwcb.getUsage(); // Questo metodo restituisce un intero. Si possono distinguere i seguenti tre casi: 1)se usage = 2 viene usato un UNSERNAME_TOKEN, 2)se usage = 3 viene usata una SIGNATURE, 3) se usage = 1 viene usato un DECRYPT
if(usage == WSPasswordCallback.USERNAME_TOKEN )// Logica per ottenere la password per l’USERNAME_TOKEN per validare l’USERNAME_TOKEN
if ("pippo".equals(id))
pwcb.setPassword("progettoWS");
}
}
}
}
solo che quando provo ad inviare la richiesta con soapUI mi esce il seguente errore:
quale potrebbe essere il problema???