在RememberMeServices-Grails/Spring安全性中获取会话
我有一个类,它实现了RememberMeServices和LogoutHandler接口。我已打开会话固定,并可以选择将会话创建为true。当我尝试使用LoginAccess方法获取会话时 RequestContextHolder.currentRequestAttributes().getSession() 我听到一个错误说在RememberMeServices-Grails/Spring安全性中获取会话,grails,spring-security,grails-plugin,Grails,Spring Security,Grails Plugin,我有一个类,它实现了RememberMeServices和LogoutHandler接口。我已打开会话固定,并可以选择将会话创建为true。当我尝试使用LoginAccess方法获取会话时 RequestContextHolder.currentRequestAttributes().getSession() 我听到一个错误说 java.lang.IllegalStateException: setAttribute: Session already invalidated at org
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)
如何获取当前会话?没有看到您的实际代码,也不知道您正在使用的grails版本。在我听来,你是想从某个控制器的“LoginSucess”方法获取会话?如果是这样的话,会话是否只是作为“会话”提供,而不调用RequestContextHolder之类的东西?您应该像“请求”对象一样访问它,并像地图一样将数据塞入其中:
session.foo = "bar"