Как получить имя пользователя 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.