gpt4 book ai didi

spring - CSRF与Spring Security集成时, session 超时导致Spring MVC中的访问被拒绝

转载 作者:行者123 更新时间:2023-12-04 03:11:22 25 4
gpt4 key购买 nike

我在Spring MVC项目中将CSRF token 与Spring Security集成在一起。一切都可以与CSRF token 一起正常使用, token 将从客户端发送到服务器端。

我已经更改了logout流程,使其成为POST方法来发送CSRF token ,并且它的工作正常。

session 超时发生时,我遇到了问题,需要将其重定向到spring默认注销URL,但是它给我该URL上的Access Denied

如何重写此行为。

我在安全性配置文件中包含以下行

   <http>
//Other config parameters
<csrf/>
</http>

如果有人需要更多信息,请告诉我。

最佳答案

这个问题有点老了,但是答案总是有用的。

首先,这是 session 支持的CSRF token 的一个已知问题,如docs:CSRF Caveats - Timeouts中所述。

要解决此问题,请使用一些Javascript来检测即将到来的超时,使用与 session 无关的CSRF token 存储库或创建自定义AccessDeniedHandler路由。我选择了后者:

配置XML:

<http>
<!-- ... -->
<access-denied-handler ref="myAccessDeniedHandler"/>
</http>

<bean id="myAccessDeniedHandler" class="package.MyAccessDeniedHandler">
<!-- <constructor-arg ref="myInvalidSessionStrategy" /> -->
</bean>

MyAccessDeniedHandler:
public class MyAccessDeniedHandler implements AccessDeniedHandler {
/* ... */
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException exception)
throws IOException, ServletException {
if (exception instanceof MissingCsrfTokenException) {
/* Handle as a session timeout (redirect, etc).
Even better if you inject the InvalidSessionStrategy
used by your SessionManagementFilter, like this:
invalidSessionStrategy.onInvalidSessionDetected(request, response);
*/
} else {
/* Redirect to a error page, send HTTP 403, etc. */
}
}
}

另外,您可以将自定义处理程序定义为 DelegatingAccessDeniedHandler:
<bean id="myAccessDeniedHandler" class="org.springframework.security.web.access.DelegatingAccessDeniedHandler">
<constructor-arg name="handlers">
<map>
<entry key="org.springframework.security.web.csrf.MissingCsrfTokenException">
<bean class="org.springframework.security.web.session.InvalidSessionAccessDeniedHandler">
<constructor-arg name="invalidSessionStrategy" ref="myInvalidSessionStrategy" />
</bean>
</entry>
</map>
</constructor-arg>
<constructor-arg name="defaultHandler">
<bean class="org.springframework.security.web.access.AccessDeniedHandlerImpl">
<property name="errorPage" value="/my_error_page"/>
</bean>
</constructor-arg>
</bean>

关于spring - CSRF与Spring Security集成时, session 超时导致Spring MVC中的访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27654206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com