#spring #spring-security #cors #http-status-code-403
Вопрос:
Я пытаюсь реализовать и использовать Rest API в проекте, к которому применяется Spring 5 Spring Security 5.
При тестировании с почтальоном после локального запуска Tomcat
url: http://localhost:8080/api~
Было подтверждено, что такие запросы, как get, post и put, работают нормально.
Я загрузил этот проект на https-сервер и во время тестирования api на сервере в local Postman,
В запросах, таких как put и post, произошла ошибка 403, запрещенная, за исключением запросов get.
Когда я погуглил, там было написано, что проблема csrf Spring Security проблема обработки cors.
Поэтому я изменил код вот так.
- WebSecurityConfig
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/").permitAll()
~
.anyRequest().permitAll()
.and()
.formLogin()
~
.and()
.logout()
~
.and()
.httpBasic().disable().cors().configurationSource(corsConfigurationSource())
.and()
.sessionManagement()
~
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfiguration);
return source;
}
- WebMvcConfig
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedOrigins("*");
}
- Контроллер
@CrossOrigin("*")
Но в запросе freflight он обычно возвращает 200, но в этом запросе я все равно получаю 403.
Какая часть неверна? Я был бы признателен, если бы вы дали мне знать 🙂
Комментарии:
1. Привет, Мэнди, добро пожаловать в StackOverflow. На самом деле это не ответ. Пожалуйста, отредактируйте свой исходный вопрос, если вы хотите добавить больше информации или привести другой пример
Ответ №1:
В вашей конфигурации добавьте фильтр add Cors через конструктор HttpSecurity. т. е.
Override
protected void configure(HttpSecurity http) throws Exception {
http.cors()
.........
Это позволит выполнять предварительные запросы cors, которые используются PUT и POST.
вам не нужно включать источник CorsConfigurationSource, просто убедитесь, что в ваших контроллерах также есть аннотация @CrossOrigin.