У нас есть задача сертифицировать наше приложение в Tomcat7, которое уже сертифицировано и работает в Websphere.Как удержать HttpServletRequest в модуле входа в Jaas в Tomcat
Наше приложение в websphere имеет пользовательский модуль входа JAAS и обеспечивает доступ к объекту HttpServletRequest с помощью обработчиков обратного вызова, как показано ниже, и мы устанавливаем связанную с пользователем информацию в объекте сеанса (который извлекается из запроса).
javax.security.auth.callback.Callback callbacks[] = new javax.security.auth.callback.Callback[3];
callbacks[0] = new javax.security.auth.callback.NameCallback(
"Username: ");
callbacks[1] = new javax.security.auth.callback.PasswordCallback(
"Password: ", false);
callbacks[2] = new com.ibm.wsspi.security.auth.callback.WSServletRequestCallback(
"HttpServletRequest: ");
Проблема заключается в том, что, как вы видите, приведенный выше код специфичен для websphere. Итак, мы хотим написать еще один пользовательский модуль для входа в Tomcat. Извините, это спроектировано кем-то другим.
Теперь, как я могу получить доступ к объекту HttpServletRequest/HttpSession в модуле входа в Jaas в Tomcat?
Примечание: я попытался использовать ThreadLocal для передачи пользовательской информации вместо HttpServeletRequest, но кажется, что не рекомендуется, поскольку потоки повторно используются из пула потоков в Tomcat, и могут возникнуть потенциальные проблемы (утечка памяти, информация о пользователе общий и т. д.), если мы не очистим ThreadLocal правильно.
По сравнению с WAS Tomcat имеет очень ограниченные возможности, когда речь идет о JAAS. Вполне вероятно, что вам нужно будет изменить приложение. Есть ли что-либо, препятствующее заполнению объекта сеанса в сервлет-фильтре? – fnt
Модуль регистрации JAAS выполняется перед сервлет-фильтром. Только модуль входа в JAAS знает информацию об аутентификации/авторизации, такую как недопустимые учетные данные, закрытие учетной записи, истекший срок действия пароля, доступ запрещен и т. Д. Мне нужна эта информация, чтобы отобразить соответствующее сообщение об ошибке, если логин не удался. – kotacc
Я все еще ищу решение через 1 год :) – kotacc