У меня есть следующий класс конфигурации, который реализует интерфейс WebMvcConfigurer и переопределяет метод addCorsMappings. (как описано здесь: https://www.baeldung.com/spring-cors)
@Configuration
//@EnableWebMvc <- I tried with and without, no effect
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
У меня также есть класс конфигурации, расширяющий WebSecurityConfigurerAdapter:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserDetailsService customService = new CustomUserDetailsService();
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors().and()
.csrf().disable()
.authorizeRequests()
.antMatchers("/user/signup*").permitAll()
.and()
.authorizeRequests()
.antMatchers("/auth*").permitAll()
.and()
.authorizeRequests()
.antMatchers("/nummern/**").permitAll()
.and()
.authorizeRequests()
.antMatchers("/information/").hasRole("OWNER")
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()))
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}
Каждый раз, когда я делаю HTTP-запрос на моя конечная точка авторизации, используя Ajax, я получаю следующую ошибку:
Доступ к XMLHttpRequest в 'http://localhost: 8080 / auth? username = Example & password = Example ' from origin 'http://localhost: 3000 'заблокировано политикой CORS: в запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '.
Поскольку этот подход не дал результата, я также попробовал подход, описанный в документации Spring Security 5, но это тоже не сработало:
https://docs.spring.io/spring-security/site/docs/5.0.5.RELEASE/reference/htmlsingle/#cors
Я не уверен, что это связано с моим Конфигурация CORS или некоторая конфигурация CSRF (насколько мне известно, CSRF должен быть отключен из-за моей конфигурации HttpSecurity):
2020-05-29 13:52:40.377 DEBUG 21056 --- [nio-8080-exec-1] o.s.security.web.FilterChainProxy : /auth?username=Example&password=Example at position 3 of 15 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2020-05-29 13:52:40.378 DEBUG 21056 --- [nio-8080-exec-1] o.s.security.web.FilterChainProxy : /auth?username=Example&password=Example at position 4 of 15 in additional filter chain; firing Filter: 'CsrfFilter'
2020-05-29 13:52:40.381 DEBUG 21056 --- [nio-8080-exec-1] o.s.security.web.csrf.CsrfFilter : Invalid CSRF token found for http://localhost:8080/auth?username=Example&password=Example
2020-05-29 13:52:40.382 DEBUG 21056 --- [nio-8080-exec-1] o.s.s.w.header.writers.HstsHeaderWriter : Not injecting HSTS header since it did not match the requestMatcher org.springframework.security.web.header.writers.HstsHeaderWriter$SecureRequestMatcher@4ea0d6af
2020-05-29 13:52:40.382 DEBUG 21056 --- [nio-8080-exec-1] w.c.HttpSessionSecurityContextRepository : SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession.
Я пробовал различные другие предлагаемые решения и конфигурации CORS для более старых версий Spring Security, но ни одного из них до сих пор оказало какое-либо влияние на мою проблему.
Это похоже на последнее решение для аналогичного вопроса, также не сработало для меня:
Spring Boot Security В запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. Ошибка
EDIT : Я пытался использовать расширение отключения CORS для Firefox (и различных HTTP клиентов), но я не смог увидеть никаких различий, кроме перенаправления на конечную точку / login, которую я также пытался отключить, используя:
http.httpBasic().disable()
Мое приложение Spring по-прежнему выдает ту же ошибку, что и упомянутая выше во всех тестовых случаях.
РЕДАКТИРОВАТЬ # 2: Я также пробовал:
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:3000");
}
};
}