Как получить имя пользователя ws-security в заголовок сообщения Spring Integration

Я довольно новичок в Spring Integration. Как получить токен имени пользователя ws-security в заголовок Spring Integration. Я понимаю, как добавить Wss4jSecurityInterceptor для проверки имени пользователя, но так как это перехватчик, у меня нет доступа к объекту Mwssage. Когда сообщение разбито на объект JAB, я теряю ссылку на заголовок SOAP.

<bean
        class="org.springframework.ws.server.endpoint.mapping.UriEndpointMapping">
        <property name="mappings">
            <props>
                <!-- TODO use config property for host -->
                <prop key="${service.endpoint.url}/SNTWS/service/ConfigService">SOAPCompanyGateway</prop>
                <prop key="${service.endpoint.url}/SNTWS/service/CompanyService">SOAPCompanyGateway</prop>
                <prop key="${service.endpoint.url}/SNTWS/service/ContactService">SOAPContactGateway</prop>
                <!-- TODO add default mapping -->
            </props>
        </property>

        <property name="interceptors">
            <array>

                <ref bean="SOAPSecurityInterceptor"></ref>
            </array>
        </property>
    </bean>

<bean id="SOAPSecurityInterceptor"
        class="com.ps.snt.ws.interceptor.SOAPSecurityInterceptor">
        <property name="validationActions" value="UsernameToken"/>
    </bean>

Могу ли я использовать SPEL для доступа к этой информации? Например, могу ли я сделать это (псевдо-код):

<int:header-enricher input-channel="SOAPConfigRequestChannel"
        output-channel="SOAPRequestChannel">
        <int:header name="username" value="message.getSecurity().getUserName()" />
    </int:header-enricher>

1 ответ

Решение

Все заголовки SOAP отображаются в заголовки сообщений (по умолчанию) с помощью DefaultSoapHeaderMapper.

Другие вопросы по тегам