Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
禁用SpringSecurity';s SavedRequest存储逻辑_Spring_Spring Mvc_Spring Security - Fatal编程技术网

禁用SpringSecurity';s SavedRequest存储逻辑

禁用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安全性来管理身份验证。我们看到的问题是,当用户的会话在打开GET表单和点击save按钮进行POST之间超时时,它们会被发送到登录页面,但spring会在会话中保存原始POST信息

我们的应用程序在登录后不会将它们返回到原始URL,而是将它们发送回一个公共起始页。这很好,但是当用户恰好返回到他们最初尝试发布到的页面(表单GET和POST是相同的URL)时,Spring会尝试自动重新提交帖子,这不是我们想要的


有没有办法在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没有请求缓存