Wss4jSecurityInterceptor - мой пользовательский обратный вызов интерпретируется как объект CleanupCallback - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю над проектом, созданным с использованием Java 8 и Spring Boot, в который я хочу добавить Wss4jSecurityInterceptor для входа в систему.
Пока что это то, что я сделал в классе WebServiceConfig

@Bean
public AuthorizationCallBackHandler authorizationCallBackHandler(){
    AuthorizationCallBackHandler callbackHandler = new AuthorizationCallBackHandler();
    return callbackHandler;
}
@Bean
public Wss4jSecurityInterceptor securityInterceptor(){
    Wss4jSecurityInterceptor securityInterceptor = new Wss4jSecurityInterceptor();
    securityInterceptor.setValidationActions("UsernameToken");
    securityInterceptor.setValidationCallbackHandler(authorizationCallBackHandler());
    return securityInterceptor;
}

    @Override
    public void addInterceptors(List interceptors) {
        interceptors.add(securityInterceptor());
        //interceptors.add(endPointInterceptor());
    }

Итак, каждый запрос, поступающий в мой веб-сервис, будет перехватываться Wss4jSecurityInterceptor и обрабатыватьсямоим пользовательским обратным вызовом, определенным следующим образом, в состоянии сделать что-нибудь с этим.
Чего мне не хватает в следующих настройках?

Это SOAP-вызов, который я выполняю с SOAP UI

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:it="some.fancy.ws">
   <soapenv:Header>
       <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
       <wsse:UsernameToken wsu:Id="UsernameToken-3967AEB46D733EF6E2154990461080350">
       <wsse:Username>Just a user</wsse:Username>
       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">just a password</wsse:Password>
       <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">pUn8VjdpVaIamSAIwXEeXg==</wsse:Nonce>
       <wsu:Created>2019-02-16T17:03:30.803Z</wsu:Created>
       </wsse:UsernameToken></wsse:Security>
  </soapenv:Header>
   <soapenv:Body>
      <it:getPOrderRequest>
         <it:poNumber>2197111225-F03292</it:poNumber>
      </it:getPOrderRequest>
   </soapenv:Body>
</soapenv:Envelope>

1 Ответ

0 голосов
/ 15 февраля 2019

Для всех, кто заинтересовался, я решил эту проблему, в первую очередь удалив из запроса содержимое внутри заголовка.
После этого я настроил Исходящий WSS с учетными данными, и вот так обработчик безопасности Wss4j преобразовал Обратный вызов в нужный мне экземпляр (то есть WSPasswordCallback).
Извлеченный урок: если Wss4j обнаружит какую-то ошибку при обработке запроса SOAP, он сгенерирует CleanupCallback, а не экземпляр WSPasswordCallback

...