WSContext.getUserPrincipal() возвращает значение null для аутентификации паролей

В моем WebService мне нужно записать идентификатор вызывающего абонента, но wsContext.getUserPrincipal() возвращает значение null, даже если пользователь был аутентифицирован с использованием WS-Security с аутентификацией пароля. Согласно JavaDocs для JAX-WS 2.1 WSContext.getUserPrincipal() должен возвращать только null, если пользователь не прошел аутентификацию.

Нужно ли мне что-то делать в обработчике безопасности, чтобы установить принципала пользователя в WSContext? Документы, похоже, указывают, что это делается автоматически.

Я использую стек metro 1.1 (я думаю, 1.1.5) с jax-ws 2.1.3 стеком на Tomcat.

Ответ 1

Попробуйте выполнить итерацию по wsContext.getMessageContext(). entrySet() и отображению значений, иногда они есть, но по какой-либо причине не могут быть восстановлены методом getUserPrincipal().

В этом случае просто возьмите с себя принципала прямо оттуда и оставьте комментарий к будущему о том, что это не очень портативно.