看起來,當啓用CSRF保護時,如果請求使用GET
方法,Spring Security只會將您的原始請求置於requestCache
中。爲了讓它緩存POST
請求,我創建了一個自定義requestCache
。
我不是100%確信這樣做不會以某種方式削弱CSRF保護,但在我看來這似乎是安全的。
增加請求緩存豆的XML配置:
<bean id="requestCache" class="a.b.c.AlwaysSaveRequestCache" />
<http>
<csrf />
<request-cache ref="requestCache" />
</http>
實現自定義請求緩存,由HttpSessionRequestCache
擴展和借款代碼:
public class AlwaysSaveRequestCache extends HttpSessionRequestCache
{
@Override
public void saveRequest(HttpServletRequest request, HttpServletResponse response)
{
final String SAVED_REQUEST = "SPRING_SECURITY_SAVED_REQUEST";
DefaultSavedRequest savedRequest = new DefaultSavedRequest(request, new PortResolverImpl());
request.getSession().setAttribute(SAVED_REQUEST, savedRequest);
logger.debug("DefaultSavedRequest added to Session: " + savedRequest);
}
}
你POST
要求,現在應該緩存和重新在被登錄表單中斷後顯示。
我很想聽聽你對這個答案。要麼是如何用Spring Security來實現它的解釋,要麼是解釋它本質上是不安全的,因此Spring Security不應該/不能做到這一點。 – Blaine