8

私のスタンドアロンアプリケーションは、セキュリティ管理にShiroを使用しています。期限切れのセッションで問題が発生しています。ユーザーセッションが期限切れになり、ユーザーを再度ログインしようとすると、次の例外が発生します。誰か助けてもらえますか?

org.apache.shiro.session.UnknownSessionException:IDが[d32af383-5f26-463f-a2f0-58a0e82c7890]のセッションはありません
 org.apache.shiro.session.mgt.eis.AbstractSessionDAO.readSession(AbstractSessionDAO.java:170)で
 org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236)で
 org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222)で
 org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118)で
 org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:105)で
 org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupRequiredSession(AbstractNativeSessionManager.java:109)で
 org.apache.shiro.session.mgt.AbstractNativeSessionManager.stop(AbstractNativeSessionManager.java:238)で
 org.apache.shiro.session.mgt.DelegatingSession.stop(DelegatingSession.java:127)で
 org.apache.shiro.session.ProxiedSession.stop(ProxiedSession.java:107)で
 org.apache.shiro.subject.support.DelegatingSubject $ StoppingAwareProxiedSession.stop(DelegatingSubject.java:419)で
 org.apache.shiro.session.ProxiedSession.stop(ProxiedSession.java:107)で
 org.apache.shiro.subject.support.DelegatingSubject $ StoppingAwareProxiedSession.stop(DelegatingSubject.java:419)で

春を使ってシロを構成しています

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

1 に答える 1

5

認証にリモート ejb を使用しているときに、同じ問題に直面しています。

回避策として、最初のログイン試行は、UnknownSessionException. 次に、ユーザーを再度ログインさせるためにASubjectをゼロから作成します。

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);
}
于 2012-12-12T16:46:33.067 に答える