2015-09-09 5 views
1


Мой проект использует Spring Security + Spring MVC и имеет дело с websocket (поверх stomp + sockjs).
Когда я тестирую резервную копию sockjs, возвращается запрос XHR 403. Если я отключу csrf в контексте безопасности, все в порядке.
Если я переопределять значение sockjs AbstractXHRObject конструктор так: это нормально:Sockjs fallback with Spring Security CSRF enable

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 не равно нулю ...

Мой вопрос: Что такое способ добавления заголовков на резервный объект XHR SockJS?

Благодаря

+0

понятия о sockjs в случае angularjs вы можете добавить перехватывать и добавить заголовки, как этот HTTP: // StackOverflow. ком/вопросы/27332717/с помощью-angularjs-в-для-извлечения-а-заголовок-из-ответа-и-установить-он-на-аль –

ответ

1

Наконец отключить CSRF для sockjs URL в моем контексте безопасности.

<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/

Смежные вопросы