禁用SpringSecurity';s SavedRequest存储逻辑
我们使用Spring安全性来管理身份验证。我们看到的问题是,当用户的会话在打开GET表单和点击save按钮进行POST之间超时时,它们会被发送到登录页面,但spring会在会话中保存原始POST信息 我们的应用程序在登录后不会将它们返回到原始URL,而是将它们发送回一个公共起始页。这很好,但是当用户恰好返回到他们最初尝试发布到的页面(表单GET和POST是相同的URL)时,Spring会尝试自动重新提交帖子,这不是我们想要的禁用SpringSecurity';s SavedRequest存储逻辑,spring,spring-mvc,spring-security,Spring,Spring Mvc,Spring Security,我们使用Spring安全性来管理身份验证。我们看到的问题是,当用户的会话在打开GET表单和点击save按钮进行POST之间超时时,它们会被发送到登录页面,但spring会在会话中保存原始POST信息 我们的应用程序在登录后不会将它们返回到原始URL,而是将它们发送回一个公共起始页。这很好,但是当用户恰好返回到他们最初尝试发布到的页面(表单GET和POST是相同的URL)时,Spring会尝试自动重新提交帖子,这不是我们想要的 有没有办法在Spring中完全禁用SavedRequest存储逻辑?我
有没有办法在Spring中完全禁用SavedRequest存储逻辑?我想Spring安全问题描述了您的问题以及如何处理此问题。看起来,(2.0)或(3.0)上的session fixed protection=“newSession”属性也可以解决此问题。有两种情况: 1) 如果您希望在重新登录之后,用户应该始终被转发到默认的目标URL,而不是原始请求的URL,然后在security.xml中放入always use default target=“true”,如
<http auto-config="true">
.....
<form-login login-page="/login" always-use-default-target="true" default-target-url="/xyz"
authentication-failure-url="/login?error=true" login-processing-url="/j_security_check"/>
</http>
<http auto-config="true">
<session-management session-fixation-protection="newSession"/>
.....
</http>
.....
1) 如果您希望在重新登录后会话超时,则用户应转发到原始请求的URL,但您不希望重新提交表单,然后将session fixed protection=“newSession”放入security.xml中,如
<http auto-config="true">
.....
<form-login login-page="/login" always-use-default-target="true" default-target-url="/xyz"
authentication-failure-url="/login?error=true" login-processing-url="/j_security_check"/>
</http>
<http auto-config="true">
<session-management session-fixation-protection="newSession"/>
.....
</http>
.....
请将会话管理标记放在http配置的第一行。根据Nathan的评论,使用名称空间的XML,它是这样的:
<security:http>
<security:request-cache ref="nullRequestCache" />
<!-- ... -->
</security:http>
<bean id="nullRequestCache" class="org.springframework.security.web.savedrequest.NullRequestCache" />
在Spring 4.2.5中,我也遇到了这个问题 我的情况几乎相同:显示GET表单,等待会话超时,然后发布表单。在“我的应用”中,重新验证后将显示一个起始页。但是,如果用户随后导航到此GET表单并发布它,则会记住以前的POST参数并将其连接到当前请求,从而在@RequestParam变量中产生以逗号分隔的值 我将会话转储到身份验证控制器中,确实看到了一个名为key的“SPRING\u SECURITY\u SAVED\u REQUEST” spring文档说,默认情况下,使用“SavedRequestStatawareAuthenticationSuccessHandler”从会话检索保存的请求数据并将其应用于请求 我尝试使用“不做任何事”成功处理程序,但无法使其工作 我也试过申请 http.sessionManagement().sessionFixation().newSession() 到安全配置,但这没有帮助 然而 http.requestCache().requestCache(新的NullRequestCache())
已解决问题。如果会话超时,保存的请求来自何处?Spring似乎正在将超时前的post请求保存到新的位置?session仍然能理解它。它似乎是由AbstractProcessingFilter访问的。SPRING\u SECURITY\u SAVED\u REQUEST\u Key谢谢,我找不到jira问题。看起来我需要添加的配置是:SpringSecurity2.0.5是否有类似的配置?ExceptionTranslationFilter没有请求缓存