Spring mvc Sockjs回退,支持Spring Security CSRF启用
Spring mvc Sockjs回退,支持Spring Security CSRF启用,spring-mvc,spring-security,csrf,sockjs,Spring Mvc,Spring Security,Csrf,Sockjs,我的项目使用SpringSecurity+SpringMVC并处理websocket(通过stomp+sockjs) 当我测试sockjs时,XHR请求返回403。 如果我在安全上下文中关闭csrf,就可以了。 如果我像这样重写sockjs AbstractXHRObject构造函数:没关系: function AbstractXHRObject(method, url, payload, opts) { debug(method, url); var self = this; Ev
我的项目使用SpringSecurity+SpringMVC并处理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 URL的CSRF。
<security:csrf request-matcher-ref="csrfMatcher" />
注意:下面是不知道sockjs在angularjs的情况下,您可以像这样添加截距和标题
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);
}
}