Ява httpsession действительна? - PullRequest
4 голосов
/ 15 июля 2011

Я использую Java сервлет в Tomcat. я сохраняю в хеш-таблице имя пользователя и httpsession с атрибутом usrname Я хотел бы знать, если есть способ узнать, действителен ли httpsession.

я пробовал:

try{
    String user = httpSession.getAttribute("username")
    return "is valid";
}catch(IllegalStateException e){
    return "is not valid";
}

Спасибо за ответ, но как я могу это сделать, если я не хочу, чтобы «зарегистрированный» пользователь подключался из более чем одного места? если я контролирую, только если я создаю новый сеанс, я не могу знать, был ли он подключен к другому сеансу.

Ответы [ 3 ]

10 голосов
/ 15 июля 2011

Нет необходимости хранить httpSession в вашем собственном хэше.

Посмотрите API для HttpServletRequest .Если вы посмотрите на getSession (Boolean x) (передайте false, чтобы не создавать новый сеанс), определите, является ли сеанс действительным.Вот пример

public void doGet(HttpServletRequest req, HttpServletResponse res){
    HttpSession session = req.getSession(false);
    if(session == null){
       //valid session doesn't exist
       //do something like send the user to a login screen
    }
    if(session.getAttribute("username") == null){
       //no username in session
       //user probably hasn't logged in properly
    }

    //now lets pretend to log the user out for good measure
    session.invalidate();
}

В дополнение: если я правильно прочитал ваш вопрос и вы храните информацию на своей собственной карте, вам нужно быть осторожным, чтобы не вызвать утечку памяти иВы очищаете записи из хеш-таблицы самостоятельно.

1 голос
/ 15 июля 2011

Я согласен с Шоном.Я добавлю, что хорошей практикой для этого типа проверки является использование фильтра

См. Здесь Фильтр сервлета

Просто возьмите код, который написал Шон, и вставьте его вФильтр вместо.Определите ваш фильтр в файле web.xml, и каждый раз, когда поступит запрос, фильтр будет выполняться.

Таким образом, вы можете проверить, авторизован ли пользователь.без загромождения вашего кода сервлета.

0 голосов
/ 15 июля 2011

Вместо того, чтобы проверять, является ли сохраненный сеанс действительным, вы должны посмотреть HttpServletRequest на вашем сервлете и проверить isRequestedSessionIdValid() на этом. При работе в сервлетах вы всегда можете получить Session из Request, а не сохранять его в хэш-таблице.

...