У меня есть приложение Seam, которое должно использовать внешнее для входа в систему. Логика следующая:
- Мое приложение отправляет пользователя на внешний URL-адрес единого входа
- Пользователь делает то, что требуется для аутентификации там
- В случае успеха внешнее приложение перенаправляет пользователя обратно в мое приложение со случайным токеном
- Мой код должен связаться с внешним приложением через HTTP с переданным токеном и получить взамен полную информацию о пользователе
Довольно просто. Но я застрял.
Перенаправление приходит в / seam / resources / token. Я намеревался получить удостоверение от сеанса, заполнить его токеном и выполнить аутентификацию. Но в обработчике ресурсов пользовательский сеанс явно не виден: контекст сеанса имеет значение null. (
Я попытался сделать LifeCycle.beginCall там, и это работает в некотором смысле: логика аутентификации работает, но результат никогда не становится доступным для пользователя (сеанс пользователя все еще имеет пустую идентификационную информацию).
Что я делаю не так?
P.S. Вот более-менее полный код моего обработчика ресурсов. Для краткости ведение журнала и другие несвязанные вещи.
@Scope(ScopeType.APPLICATION)
@Name("tokenResource")
// @BypassInterceptors
public class TokenResource extends AbstractResource {
@Override
public String getResourcePath() {
return "/token";
}
@Override
public void getResource(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
String token = request.getParameter("token");
// woot?
Lifecycle.beginCall();
Identity identity = Identity.instance();
MyIdentity mid = (MyIdentity) identity;
mid.setToken(token);
mid.login();
response.sendRedirect("/home.seam");
}