Получение объекта сеанса в настраиваемой области Tomcat

Я использую область Tomcat с аутентификацией FORM. И после завершения аутентификации я хочу сохранить объект внутри сеанса, но не могу понять, как получить сеанс.

import org.apache.catalina.realm.RealmBase;

public class MyRealm extends RealmBase {

    @Override
    public Principal authenticate(String username, String credentials) {

        // get session here
        return super.authenticate(username, credentials);
    }

Причина этого в том, что раньше у меня был сервлет входа в систему, и я использовал свою собственную аутентификацию, теперь мне нужно переключиться на Tomcat Realm и в основном перенести код сервлета входа в мой пользовательский класс области. После успешного входа в систему мне нужно создать объект, который содержит объекты, специфичные для сеанса, и поместить его в текущий сеанс. И мне нужно имя пользователя и пароль, чтобы создать его, поэтому метод аутентификации () кажется единственным местом для этого.


person acheron55    schedule 16.07.2013    source источник


Ответы (1)


Я всегда делаю это с помощью Filter, который запускается после аутентификации. Если HttpSession содержит токен пользователя, я ничего не делаю и вызываю цепочку. Если HttpSession не содержит этого пользовательского токена, я делаю все, что мне нужно, чтобы настроить сеанс, используя Principal, доступный из запроса (поскольку аутентификация уже произошла).

Не похоже, что это действительно должно быть частью аутентификации (Realm), поэтому разделите их.

person Christopher Schultz    schedule 18.07.2013