我的项目使用Security + Spring,并处理websocket (通过stomp+sockjs)。
当我测试sockjs时,返回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);
}当然,我必须检查选项是否为无效.
我的问题是:,在SockJS的XHR回退对象中添加头的方法是什么?
谢谢
发布于 2015-09-14 14:29:17
最后,我在安全上下文中禁用了sockjs的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/
https://stackoverflow.com/questions/32480696
复制相似问题