Пути разрешения Spring Security с одинаковым суффиксом - PullRequest
0 голосов
/ 02 октября 2018

В моем аутентифицированном API JWT я хочу, чтобы эти пути были доступны без какой-либо аутентификации, а все другие конечные точки запрещены / отключены:

  • GET / apis / id / {id}
  • POST / apis
  • PATCH / apis / id / {id}
  • DELETE / apis / id / {id}
  • GET /swagger-ui.html

Как видно, большинство вышеуказанных конечных точек начинаются с /apis/id, POST имеет /apis.Вот мои конфигурации:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.authorizeRequests()
           .mvcMatchers(HttpMethod.GET,"/apis/id/**").permitAll()
           .mvcMatchers(HttpMethod.PATCH,"/apis/id/**").permitAll()
           .mvcMatchers(HttpMethod.DELETE,"/apis/id/**").permitAll()
           .mvcMatchers(HttpMethod.POST,"/apis", "/apis/").permitAll()
           .antMatchers(HttpMethod.GET,"/csrf","/v2/api-docs","/swagger-resources/configuration/ui",  "/configuration/ui", "/swagger-resources", "/configuration/security", "/swagger-ui.html", "/webjars/**","/swagger-resources/configuration/ui","/swagger-resources/configuration/security", "/configuration/security").permitAll()// for Swagger UI
        .anyRequest().denyAll();
    }
}

Только GET /apis/id/{id} и /swagger-ui.html проходят.Все остальные конечные точки с одинаковыми конфигами (кроме POST) были отклонены (403).Я добавил обработчик исключений и распечатал сообщение AuthenticationException, в котором говорится:

Для доступа к этому пути к ресурсу требуется полная аутентификация

Как сделать этоконечные точки публики?Я чувствую, что мне не хватает некоторых конфигураций.

Я использую Framworks:

  • Версия Spring Boot 2.0.4
  • Версия Spring Security 5.1.0

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете взглянуть на этот ответ для возможного объяснения вашей проблемы.

Вызов antMatcher(String) отменит предыдущие вызовы mvcMatcher(String), requestMatchers(), antMatcher(String), regexMatcher(String) и requestMatcher(RequestMatcher).

Теперь, когда вы понимаете основную проблему, вы можете теперь изменить свой код на что-то вроде этого:

http
    .requestMatchers()
        .antMatchers("/apis/id/**", "/csrf","/v2/api-docs","/swagger-resources/configuration/ui",  "/configuration/ui", "/swagger-resources", "/configuration/security", "/swagger-ui.html", "/webjars/**","/swagger-resources/configuration/ui","/swagger-resources/configuration/security", "/configuration/security").permitAll()
        .anyRequest().authenticated();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...