2012-08-16 34 views
0

我有一個實現了RememberMeServices和LogoutHandler接口的類。我已經打開會話固定並且可以選擇將會話創建爲true。當我試圖讓使用在RememberMeServices中獲取會話 - Grails/Spring安全性

RequestContextHolder.currentRequestAttributes()的方法loginSuccess我的會話。的getSession()

我得到一個錯誤說

java.lang.IllegalStateException: setAttribute: Session already invalidated 
    at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1273) 
    at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1238) 
    at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:130) 
    at org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession.setAttribute(GrailsHttpSession.java:210) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:229) 
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128) 
    at com.teslagovernment.security.TabulaeRememberMeServices.loginSuccess(TabulaeRememberMeServices.groovy:70) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.successfulAuthentication(AbstractAuthenticationProcessingFilter.java:294) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) 
    at org.codehaus.groovy.grails.plugins.springsecurity.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:40) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) 
    at org.codehaus.groovy.grails.plugins.springsecurity.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:79) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:167) 

我怎樣才能得到當前會話?

回答

0

沒有看到您的實際代碼,也不知道您正在使用的grails版本。這聽起來像你試圖從某些控制器的「loginSuccess」方法獲得會話?如果是這樣,是不是會話簡單地作爲「會話」可用,而不調用該RequestContextHolder的東西?您應該可以像訪問「請求」對象一樣訪問它,並將數據簡單地填充爲地圖:

session.foo = "bar" 
+0

讓我試試看看是否有效。 – allthenutsandbolts 2012-08-17 01:11:18