启用 Spring Security CSRF 的 Sockjs 回退
Posted
技术标签:
【中文标题】启用 Spring Security CSRF 的 Sockjs 回退【英文标题】:Sockjs fallback with Spring Security CSRF enable 【发布时间】:2015-12-05 11:45:57 【问题描述】:我的项目使用 Spring Security + Spring MVC 并处理 websocket(通过 stomp+sockjs)。 当我测试 sockjs 回退时,XHR 请求返回 403。 如果我在安全上下文中关闭 csrf 就可以了。 如果我像这样覆盖 sockjs AbstractXHRObject 构造函数:没关系:
function AbstractXHRObject(method, url, payload, opts)
debug(method, url);
var self = this;
EventEmitter.call(this);
// HACK : add csrf headers
opts["headers"][csrfHeader] = csrfToken;
setTimeout(function ()
self._start(method, url, payload, opts);
, 0);
当然,我必须检查 opts 是否不为空...
我的问题是:在 SockJS 的 XHR 后备对象上添加标头的方法是什么?
谢谢
【问题讨论】:
不知道 sockjs 在 angularjs 的情况下你可以添加拦截和添加这样的标题***.com/questions/27332717/… 【参考方案1】:最后,我在我的安全上下文中禁用了 sockjs URL 的 CSRF。
<security:csrf request-matcher-ref="csrfMatcher" />
和匹配器:
public class CsrfSecurityRequestMatcher implements RequestMatcher
private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");
private AntPathRequestMatcher unprotectedMatcher = new AntPathRequestMatcher("/ws/**/xhr_send**");
@Override
public boolean matches(HttpServletRequest request)
if (allowedMethods.matcher(request.getMethod()).matches())
return false;
return !unprotectedMatcher.matches(request);
注意:它遵循http://blogs.sourceallies.com/2014/04/customizing-csrf-protection-in-spring-security/
【讨论】:
以上是关于启用 Spring Security CSRF 的 Sockjs 回退的主要内容,如果未能解决你的问题,请参考以下文章
使用 CSRF 登录后如何启用 Spring Security POST 重定向?
如何解决在使用 Spring Boot 和 Spring Security 启用 CSRF 后无法正常工作的登录问题?
需要为 /login spring security 禁用 CSRF