【问题标题】:Sockjs fallback with Spring Security CSRF enable启用 Spring Security CSRF 的 Sockjs 回退
【发布时间】: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 后备对象上添加标头的方法是什么

谢谢

【问题讨论】:

标签: spring-mvc spring-security csrf sockjs


【解决方案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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-16
    • 2015-12-10
    • 2021-02-06
    • 2016-01-12
    • 2016-09-01
    • 2021-04-14
    • 2015-12-01
    相关资源
    最近更新 更多