【问题标题】:Shiro expired session handlingShiro 过期会话处理
【发布时间】:2012-11-30 05:04:26
【问题描述】:

我的独立应用程序使用 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)

我是用spring来配置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> 

【问题讨论】:

    标签: session-timeout shiro


    【解决方案1】:

    我在使用远程 ejb 进行身份验证时遇到了同样的问题。

    作为一种解决方法,第一次登录尝试是在捕获UnknownSessionException 的 try/catch 块中。 然后从头开始构建Subject 以再次登录用户。

    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);
    }
    

    【讨论】:

    • 我尝试了这项工作,但似乎不起作用。这个问题占上风。
    • @Amar Sosa:你能把你的shiro配置和相关的shiro代码贴出来吗?
    • 我正在使用spring来配置shiro
    • 我尝试了以下 UsernamePasswordToken token = new UsernamePasswordToken(username, password);尝试{主题.登录(令牌); } catch (UnknownSessionException 使用) { subject = new Subject.Builder().buildSubject();尝试{主题.登录(令牌); } catch (UnknownSessionException use2) { subject = new Subject.Builder().buildSubject(); } subject.login(令牌);会话 = subject.getSession(true); } 从字面上看,再一次尝试登录。这太奇怪了。显然在最后一次登录尝试之前清理了一些东西
    猜你喜欢
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2011-01-20
    • 2016-05-23
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多