질문은 약간 오래된 것이지만 답변은 항상 유용합니다.
먼저 이것은 세션에서 지원되는 CSRF 토큰과 관련하여 알려진 문제입니다 (문서 : CSRF Caveats - Timeouts에서 설명 됨).
해결하려면 몇 가지 Javascript를 사용하여 절박한 시간 초과를 감지하고 세션 독립적 인 CSRF 토큰 리포지토리를 사용하거나 사용자 지정 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>
감사합니다 ... 나는 이미 그것을 다 .. –