2012-08-07 151 views
1

我在掛毯應用程序中使用shiro(1.2.0)。現在我只想用它來進行會話管理。雖然默認的會話管理(使用ServletContainerSessionManager)的作品,當我嘗試切換到本地會話四郎停止跟蹤其中的一部分:Shiro爲每個getSession創建一個新會話()

public static WebSecurityManager decorateWebSecurityManager(WebSecurityManager manager) { 
    if(manager instanceof TapestryRealmSecurityManager) { 
    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); 
    MemorySessionDAO sessionDAO = new MemorySessionDAO(); 
    sessionManager.setSessionDAO(sessionDAO); 
    ((TapestryRealmSecurityManager) manager).setSessionManager(sessionManager); 
    } 
    return null; 
} 

調試輸出:

07-08-12 17:47:57:339 - {TRACE} util.ThreadContext Thread [[email protected]]; Bound value of type [$WebSecurityManager_19518d48138a] for key [org.apache.shiro.util.ThreadContext_SECURITY_MANAGER_KEY] to thread [[email protected]] 
07-08-12 17:47:57:339 - {TRACE} mgt.DefaultSecurityManager Thread [[email protected]]; Context already contains a SecurityManager instance. Returning. 
07-08-12 17:47:57:339 - {TRACE} mgt.AbstractValidatingSessionManager Thread [[email protected]]; Attempting to retrieve session with key [email protected] 
07-08-12 17:47:57:339 - {DEBUG} servlet.SimpleCookie Thread [[email protected]]; Found 'JSESSIONID' cookie value [sbrxl74ij1v8] 
07-08-12 17:47:57:339 - {DEBUG} mgt.DefaultSecurityManager Thread [[email protected]]; Resolved SubjectContext context session is invalid. Ignoring and creating an anonymous (session-less) Subject instance. 
org.apache.shiro.session.UnknownSessionException: There is no session with id [sbrxl74ij1v8] 
at  org.apache.shiro.session.mgt.eis.AbstractSessionDAO.readSession(AbstractSessionDAO.java:170) 

回答

1

的問題是,我忘了刪除@Persist註釋,它默認使用會話來存儲數據。這導致tapestry用自己的值覆蓋shiro的JSESSIONID cookie。

相關問題