配置完spring security的csrf功能后,用APP SCAN扫描,发现登录页面没有进行会话更新(changeSessionId),如果使用servlet3.1+,可以直接在request中调用changeSessionId()方法。如果使用的是旧版本的servlet,则可以使用如下方法:
/*spring security csrf token reinvoke*/
Object obj = null;
obj =
req.getAttribute(CsrfToken.class.getName());
req.getSession().invalidate();
req.getSession();
if(obj!=null){
req.getSession().setAttribute(HttpSessionCsrfTokenRepository.class
.getName().concat(".CSRF_TOKEN"), obj);
}
上述方法只是将csrf的Token保存到新session中去,如果session中还有其他属性,则会丢失,那么可以参考以下方法:
/**
* update session id
* req.changeSessionId()
* @param req
* @param resp
*/
protected void changeSessionId(HttpServletRequest req,
HttpServletResponse resp) {
HashMap<String, Object> attributesToMigrate = new HashMap<String, Object>();;
Enumeration enumer = req.getSession().getAttributeNames();

本文介绍了在Spring Security中集成CSRF保护后,如何处理会话更新问题。当使用Servlet 3.1+,可以直接调用request的changeSessionId()方法。对于旧版本Servlet,文中提供了解决方案,防止在切换会话时丢失其他属性。
最低0.47元/天 解锁文章
1787

被折叠的 条评论
为什么被折叠?



