проверка безопасности requireCsrfProtectionMatcher с csrfTokenRepository

Я пытаюсь отключить Csrf для определенного URL-адреса. вот что я сделал до сих пор:

public HttpSessionCsrfTokenRepository csrfTokenRepository() {
    final HttpSessionCsrfTokenRepository tokenRepository = new HttpSessionCsrfTokenRepository();
    tokenRepository.setHeaderName("X-XSRF-TOKEN");
    return tokenRepository;
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    RequestMatcher matcher = request -> !("//j_spring_cas_security_check".equals(request.getRequestURI()));
    http.csrf()
            .requireCsrfProtectionMatcher(matcher)
            .csrfTokenRepository(csrfTokenRepository());

Если я закомментирую requireCsrfProtectionMatcher или просто верну false во всех сопоставлениях ошибок не будет, но с этим конфигом мне выдает:

HTTP Status 403 - Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'.

Мне нужно отключить csrf на j_spring_cas_security_check, чтобы работал единый выход, и tokenRepository для работы с angularjs. Есть ли что-то, что я упускаю?


person alizelzele    schedule 28.06.2015    source источник


Ответы (1)


Если вы ничего не передаете requireCsrfProtectionMatcher, по умолчанию все запросы GET игнорируются. В тот момент, когда вы явно предоставляете новый, поведение теряется, и вы также будете проверять запросы на GET. Измените код на следующий, чтобы разрешить запросы GET.

public class CsrfRequestMatcher implements RequestMatcher {

    // Always allow the HTTP GET method
    private Pattern allowedMethods = Pattern.compile("^GET$");

    @Override
    public boolean matches(HttpServletRequest request) {

        if (allowedMethods.matcher(request.getMethod()).matches()) {
            return false;
        }

        // Your logic goes here


        return true;
    }

}
person Pavan Andhukuri    schedule 07.01.2016
comment
Я бы посоветовал игнорировать все эти методы GET, HEAD, TRACE, OPTIONS в соответствии со стратегией документа по умолчанию. docs.spring.io/spring-security/site/docs/3.2.8.RELEASE/apidocs/ - person jona303; 14.01.2021