SpringBoot WebSecurity не игнорирует URL, если он имеет параметры - PullRequest
0 голосов
/ 11 марта 2019

Я пытался игнорировать URL-адрес из WebSecurity в SpringBoot.Был в состоянии сделать это для точного соответствия URL.Но если в самом URL есть параметр, он не может его игнорировать.Есть ли лучший способ игнорировать URL, как игнорирование конкретного контроллера.А если нет, то как обойтись с параметрами?

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/api/v1/something");
    // was able to ignore [url]/api/v1/something but not [url]/api/v1/something?xyz=wjsbjbjbsjbw
}

Ответы [ 6 ]

1 голос
/ 16 марта 2019

Вы должны достичь своей цели, если добавите звездочки (*) после текущей спецификации antMatcher.

По определению:

Сопоставление сопоставляет URL-адреса с использованием следующих правил:

  • ?соответствует одному символу
  • * соответствует нулю или более символов
  • ** соответствует нулю или более каталогов в пути
  • {spring: [az] +} соответствует регулярному выражению [az] + как переменная пути с именем «spring»

Важный фрагмент кода может выглядеть следующим образом:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/api/v1/something*");
}

Вы также можете добиться того же, используядругой перегруженный метод конфигурации с параметром типа HttpSecurity для конфигураций безопасности, связанных с путями, который будет выглядеть следующим образом:

@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/api/v1/something*").permitAll();
}

Как указано в определении, вы также можете пойти еще дальше и разрешить все, что нижепуть при завершении вашего AntMatcher с помощью /**.Но это действительно зависит от вашего варианта использования.Для подробностей реализации смотрите Spring AntPathRequestMatcher


Ваше соответствующее отображение запроса должно выглядеть следующим образом (пример с @GetMapping).Важно, чтобы на вашем пути не было трейлинга /.

@GetMapping("/api/v1/something")
public ResponseEntity<String> getSomething(@RequestParam(value = "xyz", required = false) String xyz){
    return ResponseEntity.ok("Called with xyz param: " + xyz);
}
1 голос
/ 15 марта 2019

Вы можете использовать regexmatchers для того же.

public void configure(WebSecurity web) throws Exception {
      web.ignoring().regexMatchers("/api/v1/something.*");
}
1 голос
/ 15 марта 2019

Это должно сработать для вас.

[url]/api/v1/something?xyz=wjsbjbjbsjbw

заменить, как показано ниже "wjsbjbjbsjbw" = *

ТАК новый URL будет

[url]/api/v1/something?xyz=*

Каждое значение после / можно рассматривать как *.

Я не уверен, что something, иначе вы можете сделать это * также

Или наоборот, который определенно сработает, это

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("[url]/api/v1");
}

Подробнее см. Spring Security Samples

1 голос
/ 15 марта 2019

Попробуйте, используя HttpSecurity

@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/api/v1/something/**").permitAll();
}
1 голос
/ 11 марта 2019

Попробуйте с подстановочными знаками.

web.ignoring().antMatchers("/api/v1/something/**");
0 голосов
/ 18 марта 2019

web.ignoring().antMatchers("/api/v1/something/**"); должно работать нормально, но убедитесь, что вы включили web.ignoring().antMatchers("/error/**");, так как раньше я сталкивался с подобной проблемой, конечные точки ошибок также проходили проверку подлинности. надеюсь, это поможет.

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