2012-12-12 25 views
8

Moja samodzielna aplikacja używa Shiro dla zarządzania zabezpieczeniami. Występuje problem z sesjami, które wygasły. Jeśli sesja użytkownika wygasła i próbuję ponownie zalogować użytkownika, otrzymuję następujący wyjątek. Czy ktoś może pomóc?Obsługa sesji Shiro wygasła

 
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) 

Używam wiosna skonfigurować Shiro

<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> 

Odpowiedz

4

Jestem stoi ten sam problem podczas korzystania z pilota zdalnego EJB do uwierzytelniania.

Jako obejście pierwsza próba logowania znajduje się w bloku prób/catch, który przechwytuje UnknownSessionException. A Subject jest następnie budowany od zera w celu ponownego zalogowania użytkownika.

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

Próbowałem tej pracy, ale nie wydaje się działać. Najważniejsza jest kwestia. –

+0

@Amar Sosa: Czy możesz opublikować swoją konfigurację Shiro i odpowiedni kod Shiro? – zellus

+0

Używam wiosna skonfigurować Shiro org.apache.shiro.mgt.DefaultSecurityManager \t < klasa = "org.springframework.beans fasoli .factory.config.MethodInvokingFactoryBean "> \t \t