Я пытался игнорировать 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
}
Попробуйте с подстановочными знаками.
web.ignoring().antMatchers("/api/v1/something/**");
не получилось, но спасибо. Тем не менее /api/v1/something игнорируется, но не с параметрами
Попробуйте использовать HttpSecurity
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/v1/something/**").permitAll();
}
Это должно сработать для вас.
[url]/api/v1/something?xyz=wjsbjbjbsjbw
заменить, как показано ниже "wjsbjbjbsjbw" = *
SO новый URL будет
[url]/api/v1/something?xyz=*
Каждое значение после / можно рассматривать как *.
Я не уверен, что something еще вы можете сделать это * также
Или наоборот, который определенно сработает,
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("[url]/api/v1");
}
Подробнее см. Образцы безопасности Spring.
Вы можете использовать regexmatchers для того же.
public void configure(WebSecurity web) throws Exception {
web.ignoring().regexMatchers("/api/v1/something.*");
}
Вы должны достичь своей цели, если добавите звездочки (*) после вашей текущей спецификации antMatcher.
The mapping matches URLs using the following rules:
- ? matches one character
- * matches zero or more characters
- ** matches zero or more directories in a path
- {spring:[a-z]+} matches the regexp [a-z]+ as a path variable named "spring"
Важный фрагмент кода может выглядеть так:
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/api/v1/something*");
}
Вы также можете добиться того же, используя другой перегруженный метод configure с параметром типа 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);
}
web.ignoring().antMatchers("/api/v1/something/**"); должно работать нормально, но проверьте, включили ли вы web.ignoring().antMatchers("/error/**");, так как я сталкивался с подобной проблемой ранее, конечные точки ошибок также аутентифицируются. надеюсь это поможет.
Это была проблема, я попытался отладить код. Ошибка возникла из-за другого кода.
Добавьте "*" к своему URL-адресу, и он будет работать на вас.