Как исправить apache shiro неизвестное исключение сессии при выходе - PullRequest
1 голос
/ 29 апреля 2019

У меня есть веб-приложение ADF, разработанное с использованием версии Jdeveloper 12.1.3, версии Glassfish server 3.1.2 и Apache Shiro для безопасности.

Действие входа и безопасность приложения работают нормально, но не выход из системы.

После выхода из приложения его следует перенаправить на страницу входа.Но он выдает

"javax.servlet.ServletException: java.lang.IllegalStateException: org.apache.shiro.session.UnknownSessionException: нет сеанса с ошибкой id".

Код метода действия выхода из системы:

public String logout() throws IOException {

    try {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        externalContext.invalidateSession();
        SecurityUtils.getSubject().logout();
    } catch (Exception e) {
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        e.printStackTrace(); // TODO: logger.
    }
    return "";
}

Я что-то пропустил?

1 Ответ

0 голосов
/ 30 апреля 2019

Похоже, вы сделали недействительным сеанс, а затем вызвали выход из системы. Вы пытались сначала выйти из системы? Или что-то вроде:

Subject subject = SecurityUtils.getSubject();
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.invalidateSession();
subject.logout();

В противном случае, похоже, что вы пытаетесь получить текущий предмет из пустой сессии.

...