Używam Apache CXF do zbudowania usługi sieciowej. Używa Apache WSS4J, aby zapewnić funkcjonalność WS-Security. Muszę wysłać żądanie SOAP i musi ono zostać podpisane.Jak WSS4J załadować hasło magazynu kluczy z wywołania zwrotnego?
To jest zawartość pliku właściwości przekazać do WSS4J:
org.apache.ws.security.crypto.provider = org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type = PKCS12
org.apache.ws.security.crypto.merlin.keystore.provider = BC
org.apache.ws.security.crypto.merlin.keystore.password = 12345678
org.apache.ws.security.crypto.merlin.keystore.alias = my-alias
org.apache.ws.security.crypto.merlin.keystore.file = my_certificate.p12
Chcę, aby pozbyć się tej linii z moje hasło pisał jako zwykły tekst. Usunąłem tę linię i pod hasłem obsługi wywołania zwrotnego do mojego WSS4JOutInterceptor, jak w powyższym kodzie:
public SoapInterceptor newSignerInterceptor() {
Map<String, Object> outProps = new HashMap<String, Object>();
outProps.put(WSHandlerConstants.ACTION, "Signature");
outProps.put(WSHandlerConstants.USER, config.getKeyAlias());
outProps.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference");
outProps.put(WSHandlerConstants.USE_REQ_SIG_CERT, WSHandlerConstants.SIGNATURE_USER);
outProps.put(WSHandlerConstants.USE_SINGLE_CERTIFICATE, "false");
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, this.getClass().getName());
outProps.put(WSHandlerConstants.SIG_PROP_FILE, config.getPropertiesFileName());
return new WSS4JOutInterceptor(outProps);
}
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof WSPasswordCallback) {
((WSPasswordCallback) callbacks[i]).setPassword(password);
}
}
}
Ale to nie działa. Nie znajduje hasła w pliku właściwości i używa domyślnego hasła "security".
Jak sprawić, by korzystał z oddzwonienia, aby uzyskać hasło?