При работе с кросс-доменами большую часть времени мы склонны беспокоиться о том, что и где пошло не так.Существует много факторов, включая безопасность, веб-компоненты, сокеты и т. Д., Которые должны обрабатываться на стороне сервера перед обработкой запроса.Множество способов реализовать CORS
в приложении Spring Boot.
1.Аннотация
Реализуя @CrossOrigin
подобно тому, что вы делали в классе Main
.Также это можно сделать, добавив @CrossOrigin
к конкретным контроллерам / методам, если к конкретному API нужно обращаться только из определенного домена.
@CrossOrigin("*") // to allow from all domains
@CrossOrigin("http://localhost:3001") // to allow from specific domain
@CrossOrigin(origins = "http://localhost:3001")
2.WebConfig
Если Spring Application - это MVC, к которому можно получить доступ к ресурсам.Просто добавьте сопоставления CORS, переопределив функцию WebMvcConfigurer's
addCorsMappings
.
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*").allowedHeaders("*");
}
}
SecurityConfig Когда в приложении включена защита, CORS должен быть реализован в
SecurityConfig
.Регистрация фильтра CORS может быть выполнена разными способами.Одним из них является добавление
UrlBasedCorsConfigurationSource
к функции http.cors ().Другим является создание
CustomCorsFilter
путем расширения
CorsFilter
.
public class CustomCorsFilter extends CorsFilter {
public CustomCorsFilter() {
super(configurationSource());
}
public static UrlBasedCorsConfigurationSource configurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowCredentials(true);
configuration.addAllowedOrigin("*");
configuration.addAllowedHeader("*");
configuration.setMaxAge(3600L);
UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**", configuration);
return corsConfigurationSource;
}
}
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
String[] paths = {"/auth/**", "/env"};
//http.cors().configurationSource(CustomCorsFilter.configurationSource()); // Option 1
http
.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(this.authenticationEntryPoint)
.and()
.authorizeRequests()
.antMatchers(paths)
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/**")
.authenticated()
.and()
.addFilterBefore(new CustomCorsFilter(), UsernamePasswordAuthenticationFilter.class); //option 2
}