Исключение защищенной веб-службы: для этой службы требуется <wsse: Security>, которая отсутствует - PullRequest
0 голосов
/ 07 июня 2011

У меня проблема с обменом сообщениями веб-службы.

1) Jboss 4.2.3GA

2) Класс веб-службы, который не имеет состояния EJB.Он использует шифрование и аннотируется так:

@Local
@Stateless
@EndpointConfig(configName = "Standard WSSecurity Endpoint")
@SOAPBinding(style = SOAPBinding.Style.RPC)
@WebService

3) Веб-служба находится в Module_1

4) Клиент имеет MBean.Он имеет следующие аннотации:

@Service(name = "MyWebServiceClient")
@Local(MyWebServiceClient.class)
@Management(MyWebServiceClient.class)

5) MyWebServiceClient находится в Module_2

6) Module_1 имеет META-Каталог INF со следующим содержимым, связанным с WS:

  • jboss-wsse-server.xml
  • server.keystore
  • server.truststore

jboss-wsse-server.xml имеет следующее содержимое:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-ws-security xmlns="http://www.jboss.com/ws-security/config" 
                   xsi="http://www.w3.org/2001/XMLSchema-instance" 
                   schemaLocation="http://www.jboss.com/ws-security/config 
                   www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd">

<key-store-file>META-INF/server.keystore</key-store-file>
<key-store-password>qwerty</key-store-password>
<key-store-type>jks</key-store-type>

<trust-store-file>META-INF/server.truststore</trust-store-file>
<trust-store-password>qwerty</trust-store-password>
<trust-store-type>jks</trust-store-type>

<key-passwords>
    <key-password alias="server" password="qwerty"/>
    <key-password alias="client" password="qwerty"/>
</key-passwords>

<config>
    <sign type="x509v3" alias="server"/>
    <encrypt type="x509v3" alias="client"/>
    <requires>
        <signature/>
        <encryption/>
    </requires>
</config>
</jboss-ws-security>

7) Module_2 имеет папку 'META-INF со следующими файлами:

  • jboss-wsse-client.xml
  • standard-jaxws-client-config.xml
  • client.keystore
  • client.truststore

jboss-wsse-client.xml содержит следующее:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-ws-security xmlns="http://www.jboss.com/ws-security/config"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.jboss.com/ws-security/config  
               http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd">

<key-store-file>META-INF/client.keystore</key-store-file>
<key-store-password>qwerty</key-store-password>
<key-store-type>jks</key-store-type>

<trust-store-file>META-INF/client.truststore</trust-store-file>
<trust-store-password>qwerty</trust-store-password>
<trust-store-type>jks</trust-store-type>

<key-passwords>
    <key-password alias="server" password="qwerty"/>
    <key-password alias="client" password="qwerty"/>
</key-passwords>

<config>
    <sign type="x509v3" alias="client"/>
    <encrypt type="x509v3" alias="server"/>
    <requires>
        <signature/>
        <encryption/>
    </requires>
</config>
</jboss-ws-security>

standard-jaxws-client-config.xml содержит следующее:

<?xml version="1.0" encoding="UTF-8"?>
<jaxws-config xmlns="urn:jboss:jaxws-config:2.0" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:javaee="http://java.sun.com/xml/ns/javaee"
              xsi:schemaLocation="urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd">

<client-config>
    <config-name>Standard WSSecurity Client</config-name>
    <post-handler-chains>
        <javaee:handler-chain>
            <javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>

            <javaee:handler>
                <javaee:handler-name>WSSecurityHandlerOutbound</javaee:handler-name>
                <javaee:handler-class>org.jboss.ws.extensions.security.jaxws.WSSecurityHandlerClient
                </javaee:handler-class>
            </javaee:handler>
        </javaee:handler-chain>
    </post-handler-chains>
</client-config>

</jaxws-config>

Оба модуля объединены после процесса сборки в один и тот же файл.Поэтому META-INF содержит все эти файлы xml и encription.

Проблема заключается в том, что при попытке отправить сообщение из Client MBean веб-служба генерирует исключение:

org.jboss.ws.core.CommonSOAPFaultException: эта служба требует , которого нет.

Насколько я знаю, это означает, что входящее мыльное сообщение не содержит заголовок sing от клиента.После активации отслеживания мыльных сообщений в log4j я вижу следующее тело сообщения от клиента:

<S:Envelope xmlns:S='http://schemas.xmlsoap.org/soap/envelope/'>
<S:Body>
    <ns2:addPoint xmlns:ns2='http://x.y.z.com/'>
        <deviceId>Device 1</deviceId>
        <color>GREEN</color>
    </ns2:addPoint>
</S:Body>
</S:Envelope>

Но свойства знака указаны в xmls сервера и клиента (см. Tat).Поэтому я не могу понять, почему сообщение о результате не подписано.

Может быть проблема в том, что все файлы конфигурации находятся в одном и том же META-INF?Имеет ли это значение?

Нужна помощь.

1 Ответ

1 голос
/ 23 июня 2011

Я нашел причину, по которой шифрование не работает. Структура проекта была следующей:

EAR:
...META-INF
...client.jar
......META-INF
.........standard-jaxws-client-config.xml
.........jboss-wsse-client.xml
.........client.keystore
.........client.truststore
......org
........myproject
.................
...server.jar
......META-INF
.........jboss-wsse-server.xml
.........server.keystore
.........server.truststore
......org
........myproject
.................

Проблема заключалась в том, что клиент не может найти стандартный jaxws-client-config.xml. Сообщение не было зашифровано.

Когда я скопировал этот файл в EAR / META-INF, шифрование было успешно выполнено, сообщение было успешно передано и расшифровано на стороне сервера.

Я думаю, это потому, что JBoss ищет стандартный-jaxws-client-config.xml в пути к классу файла ear.

Новая структура файла, которую я использую:

EAR:
...META-INF
......standard-jaxws-client-config.xml            <------- file placed here
...client.jar
......META-INF
.........jboss-wsse-client.xml
.........client.keystore
.........client.truststore
......org
........myproject
.................
...server.jar
......META-INF
.........jboss-wsse-server.xml
.........server.keystore
.........server.truststore
......org
........myproject
.................

Если сервер и клиент развернуты как отдельные файлы (без упаковки для ушей), то размещение этого файла в клиенте / META-INF работает нормально.

Как я понял, эта проблема зависит от разрешения пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...