Spring Security AntMatchers не применяется к запросам POST и работает только с GET - PullRequest
0 голосов
/ 28 июня 2018

Я использую библиотеку безопасности Spring для защиты REST apis в своем приложении, сейчас я пытаюсь разрешить доступ ко всем URL-адресам (временно), но в приведенной ниже конфигурации я нахожу, что разрешены только запросы GET, но не запросы POST (где Я получаю 403 запрещенного ответа), я понимаю, что первый антиматчер ниже должен разрешать как GET, так и POST, но на самом деле 2 antMatchers не могут разрешить POST

.

Может кто-нибудь посоветовать мне, что мне здесь не хватает?

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
// first I have tried only this antMatcher
            .antMatchers("/**").permitAll()
// But then it didn't allow POST even when only using the line below
            .antMatchers(HttpMethod.POST, "/**").permitAll()
}

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

После некоторого расследования выяснилось, что antMatcher работает должным образом и разрешает все URL-адреса, как и предполагалось, но причина запретного ответа, который я получил для API POST, заключалась в том, что Spring Security ожидал токен csrf для этих POST. запросы, потому что защита CSRF включена по умолчанию в весенней безопасности.

Таким образом, чтобы заставить его работать так, вы должны предоставить токен csrf в запросе POST, ИЛИ вы можете временно отключить защиту CSRF (но вы должны включить ее снова, прежде чем приступить к работе, поскольку это серьезная атака)

Пример кода для этого:

protected void configure(HttpSecurity http) throws Exception {
    http
        // disabling csrf here, you should enable it before using in production
        .csrf().disable
        .authorizeRequests()
       // this matcher is working for all GET/POST/... , any URL matching the reg expression
            .antMatchers("/**").permitAll()
}
0 голосов
/ 28 июня 2018

Вы должны сделать что-то подобное, и вы должны упомянуть роль

http
  .httpBasic().and()
  .authorizeRequests()
    .antMatchers(HttpMethod.POST, "/employees").hasRole("ADMIN")
    .antMatchers(HttpMethod.PUT, "/employees/**").hasRole("ADMIN")

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...