Я думаю, что подход в порядке.Особенность аннотаций состоит в том, что они статичны по своей природе во время компиляции - но это может отлично работать в вашем случае использования.
Как и во многих вещах в Spring, существует более одного действительного способа сделать это.То, что «лучше», будет зависеть от вашей ситуации и требований.Если у вас есть статическая четко определенная политика CORS, тогда аннотации могут быть наиболее простыми и наименее навязчивыми для вашей базы кода.
Если вам нужно что-то более динамичное или гибкое - возможно, на основе настроек свойств во время выполнения.В моем последнем проекте способ работы с CORS был таким:
@Configuration
@EnableWebSecurity
@Slf4j
@EnableConfigurationProperties({CORSProperties.class})
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CORSProperties properties;
@Override
protected void configure(final HttpSecurity http) throws Exception {
log.info("Configuring web security....");
http.headers()
.and()
.cors();
}
@Bean
public UrlBasedCorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(properties.getAllowedOrigins());
configuration.setAllowedMethods(allHttpMethods());
configuration.setAllowedHeaders(asList(CrossDomainCsrfTokenRepository.XSRF_HEADER_NAME, CONTENT_TYPE));
configuration.setExposedHeaders(asList(LOCATION, CrossDomainCsrfTokenRepository.XSRF_HEADER_NAME));
configuration.setAllowCredentials(true);
configuration.setMaxAge(HOURS.toSeconds(properties.getMaxAgeInHours()));
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
private List<String> allHttpMethods() {
return Stream.of(HttpMethod.values())
.map(HttpMethod::name)
.collect(toList());
}
}
Это не значит, что это обязательно лучший способ, но он работает для меня и достаточно гибок.
IПредлагаю вам также ознакомиться с образцом весенней загрузки: https://spring.io/guides/gs/rest-service-cors/, который показывает другой шаблон с использованием адаптера веб-конфигуратора:
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");
}
};
}