Я использую библиотеку безопасности Spring для защиты API REST в своем приложении, сейчас я пытаюсь разрешить доступ ко всем URL-адресам (временно), но с приведенной ниже конфигурацией я обнаружил, что разрешены только запросы GET, но не запросы POST (где я получаю 403 запрещенный ответ), я понимаю, что первый antmatcher ниже должен разрешать как GET, так и POST, но на самом деле 2 antMatcher не могли разрешить 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()
}




Вам нужно сделать что-то подобное, и вы должны упомянуть роль
http
.httpBasic().and()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/employees").hasRole("ADMIN")
.antMatchers(HttpMethod.PUT, "/employees/**").hasRole("ADMIN")
Надеюсь, это решит вашу проблему.
попробуйте вот так .antMatchers (HttpMethod.OPTIONS, tokenEndpointPath) .permitAll ()
пожалуйста, добавьте это, потому что по умолчанию csrf будет включен '.csrf (). disable ()'
зачем мне удалять защиту csrf?
После некоторого расследования выяснилось, что antMatcher работает так, как ожидалось, и разрешает все URL-адреса, как предполагалось, но причиной запрещенного ответа, который я получал для API-интерфейсов POST, было то, что безопасность Spring ждала токен 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()
}
Согласитесь с csrf().disable(), без этого никакие POST, PUT и DELETE не пройдут.
Спасибо, у меня такая же проблема, и это сводило меня с ума
Рад, что помог :)
Как указано пользователем, задавшим вопрос в вашем собственном ответе, запрещенная ошибка 403 может быть вызвана защитой CSRF. Но вместо того, чтобы отключить эту защиту, вы можете исключить некоторые AntMatcher, например:
http
(...) // oculted for brevity
.and()
.csrf()
.ignoringAntMatchers("/api/a", "/api/b")
Спасибо, но я пытаюсь разрешить все в настоящее время, поэтому роль не нужна, это работает для GET, но не для POST