2012-01-16 6 views
2

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

private void logout(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
      log.debug("do logout"); 
      Subject subject = SecurityUtils.getSubject(); 
      subject.logout(); 
      resp.sendRedirect("end.html"); 
    } 

Но после выхода из системы и повторно Войти Я получаю следующее ошибка:

org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: 
    getAttribute: Session already invalidated 
    at org.apache.shiro.web.session.HttpServletSession.removeAttribute(HttpServletSession.java:167) 
at org.apache.shiro.session.ProxiedSession.removeAttribute(ProxiedSession.java:135) 
at org.apache.shiro.subject.support.DelegatingSubject.clearRunAsIdentities(DelegatingSubject.java:424) 
at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:246) 

Войти осуществляются следующим образом (в методе компонента пользовательского интерфейса, я использую ZK в рамках пользовательского интерфейса):

private void tryLogin(UsernamePasswordToken token) { 
     Subject subject = SecurityUtils.getSubject(); 
     try { 
       subject.login(token); 
       ... 

Я не понимаю, исключения в качестве выхода из системы фр om shiro делает недействительным сеанс, и повторный вход в систему должен получить доступ к новому сеансу.

Спасибо за помощь

ответ

3

Это будет происходить в Shiro до версии 1.2, если кто-то (или что-то еще) аннулирует сессию перед Subject.logout() вызывается (например, httpSession.invalidate(), а затем subject.logout ()).

Это сообщение было поднято как ошибка в SHIRO-298, и оно уже разрешено в версиях 1.2.0-SNAPSHOT. Вы можете использовать одну из текущей сборки моментальных снимков или использовать Shiro 1.2.0 при ее выпуске.

HTH!

Приветствия,

Les

+0

Привет, я использую версию Shiro '1.2.4', все еще получаю тот же вопрос' GetAttribute: Session уже invalidated' после выхода из системы и повторного входа. Любая помощь? – Newbie

1

это выглядит как ваша структура UI не восстанавливающий сеанс после выхода из системы. Вы можете попытаться заставить новый сеанс вызова subject.getSession() непосредственно перед вызовом входа в систему. Что-то вроде этого:

private void tryLogin(UsernamePasswordToken token) { 
     Subject subject = SecurityUtils.getSubject(); 
     Session session = subject.getSession(); 
     try { 
       subject.login(token); 
Смежные вопросы