2011-01-25/23:30:06.856/EST [http-80-exec-1] WARN Failed to create a session, as response has been committed. Unable to store SecurityContext.
2011-01-25/23:30:09.597/EST [http-80-exec-3] WARN Authentication event InteractiveAuthenticationSuccessEvent: email@domain.com; details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 170.9.26.16; SessionId: null
我正在使用spring 3
tomcat 6
和spring security 3
我根据此信息(来自here)重新配置了以下bean:
创建会话
控制创建HTTP会话的热情。如果未设置,则默认为“ifRequired”。其他选项是“永远”和“从不”。此属性的设置会影响HttpSessionContextIntegrationFilter的allowSessionCreation和forceEagerSessionCreation属性。除非将此属性设置为“never”,否则allowSessionCreation将始终为true。 forceEagerSessionCreation为“false”,除非它设置为“always”。因此,默认配置允许创建会话,但不强制它。例外情况是,如果启用了并发会话控制,则forceEagerSessionCreation将设置为true,而不管此处的设置是什么。使用“never”会在HttpSessionContextIntegrationFilter初始化期间导致异常。
<bean id="httpSessionContextIntegrationFilter" class="org.springframework.security.web.context.HttpSessionContextIntegrationFilter">
<property name="allowSessionCreation" value="false"/>
</bean>
答案 0 :(得分:3)
将以下内容添加到您的配置中:http session-creation ='never'&gt; 有关Spring论坛的更多信息:http://forum.springsource.org/showthread.php?t=82196
答案 1 :(得分:1)
根据春季文件http://docs.spring.io/spring-security/site/docs/3.1.x/reference/technical-overview.html第6.3.2节
在将响应写入客户端之前,您可能需要抢先创建一个HTTP会话来缓存请求之间的上下文。一旦提交了响应,就无法创建会话。
使用grails,spring-security-core插件,X509身份验证这对我有用。
在conf / Config.groovy中添加
grails.plugins.springsecurity.useSecurityEventListener = true
grails.plugins.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx -> RequestContextHolder.currentRequestAttributes().getSession().getId()}