Как сохранить основную информацию в Tomcat (например, setPrincipal?)

Я пытаюсь создать второй способ для входа пользователя в систему наряду с функцией царства tomcat. Это означает, что неаутентифицированный пользователь может:
1. вход в систему, вызывая царство
2. Предоставление действующего токена и автоматическая регистрация

Я пытаюсь достичь 2. Поэтому я использую фильтр для перенаправления запросов в оболочку. Внутри этой обертки я перекрываю getUserPrincipal так что основной для этого пользователя может быть создан. Затем контейнер распознает принципала и позволит пользователю войти без перенаправления на страницу входа.

Однако теперь проблема заключается в следующем: кажется, что не все запросы получат правильный принципал. Запросы относительно сервлета и если сервлет использует Dispatcher для пересылки запросов получит основной набор. Простые ссылки или сервлет с использованием sendRedirect не вызовет getUserPrincipal метод и, следовательно, страница входа в систему появится, даже если пользователь вошел в систему, используя метод 2.

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

1 ответ

Я сделал именно это, но сделал это с помощью Tomcat JAAS Realm и предоставил два модуля LoginModules, один для заявки и один для имени пользователя / пароля. Требуется некоторая интеграция, чтобы предотвратить получение страницы входа в систему для входа в билет. На самом деле в моей системе есть третий метод входа в систему, с помощью действующего сертификата клиента, и существует четвертый модуль входа в систему для поиска и назначения ролей для пользователя, однако он был установлен одним из первых трех модулей.

В этом отношении помогает проект Google Code под названием AuthenticRoast, в который я внес свой вклад. Интегрируется как с Tomcat 6 и 7, так и со Glassfish, хотя я этого не пробовал.

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