Rampart: определение пароля без использования CallbackHandler - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть следующий рабочий код, который успешно подключается к WS с помощью WSSecurity с аутентификацией UsernameToken:

public void addValidation(
    Stub stub) throws Exception {

    ServiceClient serviceClient = stub._getServiceClient();

    serviceClient.engageModule("rampart");
    Options options = serviceClient.getOptions();
    options.setProperty(
        WSSHandlerConstants.OUTFLOW_SECURITY,
        getOutflowConfiguration());
    serviceClient.setOptions(options);
}

private Parameter getOutflowConfiguration() {

    OutflowConfiguration outflowConfiguration =
        new OutflowConfiguration();
    outflowConfiguration.setActionItems(
        "UsernameToken");
    outflowConfiguration.setUser(
        this.username);
    outflowConfiguration.setPasswordType(
        "PasswordText");
    outflowConfiguration.setPasswordCallbackClass(
        "es.ssib.otic.inte_portafib.cliente_custodia_axis2.PWCBHandler");
    return
        outflowConfiguration.getProperty();
}

Теперь, поскольку я хочу передать пароль программно, я пытаюсь настроить пароль в качестве параметра, но он не работает.

Я попытался заменить «конфигурацию оттока» на

    options.setUserName(
        this.username);
    options.setPassword(
        this.password);

Но эти поля полностью игнорируются Axis 2.

Я пытался использовать в этом примере

public void addValidation(
    Stub stub) throws Exception {

    ServiceClient serviceClient =
        stub._getServiceClient();

    Options options = serviceClient.getOptions();
    options.setUserName(this.username);
    options.setPassword(this.password);
    options.setProperty(
        RampartMessageData.KEY_RAMPART_OUT_POLICY,
        loadPolicy());
    serviceClient.engageModule("rampart");
}

private Policy loadPolicy() throws XMLStreamException, IOException {
    InputStream resource = new FileInputStream([path to policy.xml]");  
    StAXOMBuilder builder = new StAXOMBuilder(resource);
    return PolicyEngine.getPolicy(builder.getDocumentElement());
}}

с этим файлом политики

<wsp:Policy wsu:Id="UsernameToken" xmlns:wsu=
  "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
  xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SupportingTokens
         xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
      <wsp:Policy>
         <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/
             ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"/>
       </wsp:Policy>
     </sp:SupportingTokens>
  </wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>

но это не с сообщением:

Неверное значение включения: -1

Я использую Rampart 1.5 с Axis2 1.4

ОБНОВЛЕНИЕ: я знаю, как заставить CallbackHandler проверять статическую константу или вызывать некоторый объект данных для получения пароля. Но я не хочу этого делать.

...