Проблема заключается в том, что бранд сеанса не уничтожается до достижения таймаута сеанса.Уничтожить SessionScoped CDI beans во время выхода Siiro
Поэтому у меня есть два вопроса относительно следующей процедуры выхода из системы:
- это правильный способ использовать Shiro выход из системы (см выхода из системы() ниже)
- Что бы правильный способ уничтожить КДИ во время выхода из системы.
page.xhtml:
<p:commandLink ajax="false" actionListener="#{myOtherBean.logout}" />
бобы:
@Named @SessionScoped public class mySessionBean implements Serializable { } @Named @SessionScoped public class myOtherBean extends Observable implements Serializable { @Inject private Subject subject; public void logout(){ subject.logout(); // this line throws the exception FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); FacesContext.getCurrentInstance().getExternalContext() .redirect(servlet.getContextPath() + "/logout"); } }
shiro.ini:
[main] sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager securityManager.sessionManager = $sessionManager sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO securityManager.sessionManager.sessionDAO = $sessionDAO .... logout=org.apache.shiro.web.filter.authc.LogoutFilter logout.redirectUrl = /login.xhtml .... [urls] /logout = logout
Исключение:
следующее исключение, когда я звоню FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
java.lang.IllegalStateException: org.apache.shiro.session.UnknownSessionException: There is no session with id [e5939658-c033-4e67-984f-23cadfbc06fb]
Дополнительная информация: Я бегу Wildfly 8.2.0.Final.
Спасибо.
вы будете уверены, что он бросает, что на invalidateSession линии? скорее всего, это бросит его на subject.logout(). – teacurran
Да, с тех пор как вы спросили, я проверил его снова, и я уверен. – sinclair