Я использую Apache 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);
...
Я неследует понимать исключение, поскольку выход из системы shiro делает недействительным сеанс, и при повторном входе в систему должен быть открыт новый сеанс.