2012-12-12 4 views
8

Meine eigenständige Anwendung verwendet Shiro für Sicherheitsmanagement. Ich habe ein Problem mit abgelaufenen Sitzungen. Wenn eine Benutzersitzung abgelaufen ist und ich versuche, den Benutzer wieder einzuloggen, erhalte ich die folgende Ausnahme. Kann jemand helfen?Shiro abgelaufen Sitzung Behandlung

 
org.apache.shiro.session.UnknownSessionException: There is no session with id [d32af383-5f26-463f-a2f0-58a0e82c7890] 
at org.apache.shiro.session.mgt.eis.AbstractSessionDAO.readSession(AbstractSessionDAO.java:170) 
at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236) 
at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222) 
at org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118) 
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:105) 
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupRequiredSession(AbstractNativeSessionManager.java:109) 
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.stop(AbstractNativeSessionManager.java:238) 
at org.apache.shiro.session.mgt.DelegatingSession.stop(DelegatingSession.java:127) 
at org.apache.shiro.session.ProxiedSession.stop(ProxiedSession.java:107) 
at org.apache.shiro.subject.support.DelegatingSubject$StoppingAwareProxiedSession.stop(DelegatingSubject.java:419) 
at org.apache.shiro.session.ProxiedSession.stop(ProxiedSession.java:107) 
at org.apache.shiro.subject.support.DelegatingSubject$StoppingAwareProxiedSession.stop(DelegatingSubject.java:419) 

I Frühling bin mit shiro konfigurieren

<bean id="securityManager" class="org.apache.shiro.mgt.DefaultSecurityManager"> 
    <property name="realm" ref="myRealm"/> 
    <property name="sessionManager.globalSessionTimeout" value="3600000" /> 
</bean> 
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> 
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager"/> 
    <property name="arguments" ref="securityManager"/> 
</bean> 

Antwort

4

ich die gleiche Frage, die sich während einer Remote-ejb für die Authentifizierung verwendet wird.

Als Workaround ist der erste Login-Versuch in einem try/catch-Block die UnknownSessionException fangen. Ein Subject wird dann von Grund auf für die erneute Anmeldung des Benutzers erstellt.

UsernamePasswordToken token = new UsernamePasswordToken(username, password); 
try { 
    subject.login(token); 
} catch (UnknownSessionException use) { 
    subject = new Subject.Builder().buildSubject(); 
    subject.login(token); 
    session = subject.getSession(true); 
} 
+0

Ich habe diese Arbeit versucht, aber scheint nicht zu funktionieren. Das Problem herrscht. –

+0

@Amar Sosa: Können Sie Ihre Shiro-Konfiguration und relevanten Shiro-Code posten? – zellus

+0

I Frühling bin mit zu shiro \t \t \t \t