【问题标题】:Getting the Session in RememberMeServices- Grails/Spring Security在 RememberMeServices-Grails/Spring Security 中获取会话
【发布时间】:2012-08-17 04:34:11
【问题描述】:

我有一个实现了 RememberMeServices 和 LogoutHandler 接口的类。我已打开会话固定并可以选择将会话创建为 true。当我尝试使用

在 loginSuccess 方法中获取会话时

RequestContextHolder.currentRequestAttributes().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)

如何获取当前会话?

【问题讨论】:

    标签: grails spring-security grails-plugin


    【解决方案1】:

    没有看到您的实际代码,也不知道您正在使用的 grails 版本。在我看来,您正试图从某个控制器的“loginSuccess”方法中获取会话?如果是这样,会话不是简单地用作“会话”而不调用 RequestContextHolder 东西吗?您应该可以像“请求”对象一样访问它,并且像地图一样简单地将数据填充到其中:

    session.foo = "bar"
    

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 2016-04-22
      • 2018-01-17
      • 2012-07-26
      • 2017-11-16
      • 2012-12-26
      • 2014-06-10
      • 2017-03-20
      • 1970-01-01
      相关资源
      最近更新 更多