Как правильно передать CORS в JavaSpring farmework?

S3
На сайте с 29.03.2012
Offline
357
386
Пришлось тут немного пописать на Java. 
Задача - ограничить доступ к АПИ со сторонних ресурсов. Написал класс конфигурации, что-то типа-
package ****;


import java.util.Arrays;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * {@summary WebSecurityConfig.}
 *
 * <p>to enable CORS the application
 */
@Configuration
public class WebSecurityConfig {

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        final CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(
                List.of(
                        "https://*********",
                        "http://localhost:8080"));
       configuration.setAllowedMethods(Arrays.asList("POST", "GET", "OPTIONS", "DELETE"));
       configuration.setAllowCredentials(true);
        configuration.setAllowedHeaders(List.of("*"));
        configuration.setExposedHeaders(
                List.of("Access-Control-Allow-Origin", "Access-control=Allow-Credentials"));
       configuration.setMaxAge(3600L);

        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
Не работает, пропускает запросы с любых ресурсов.  Если добавить Security пакет - начинает работать, но возникают вопросы с авторизацией, а она не нужна на этой странице. 
Как избежать этой проблемы?

S3
На сайте с 29.03.2012
Offline
357
#1

Так я и не дождался правильного решения от "знатоков"

Но если вдруг кому понадобиться - оказывается есть отличный пакет  CorsFilter, Который помогает решить эту проблему и здорово упростить код.


import org.springframework.web.filter.CorsFilter;

@Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(
            List.of(
                "http://localhost:8080"));
        configuration.setAllowedMethods(List.of("GET","POST", "PUT", "DELETE", "PATCH"));
        configuration.setAllowCredentials(true);
        configuration.setAllowedHeaders(List.of("*"));
        source.registerCorsConfiguration("/**", configuration);
        return new CorsFilter(source);
    }

}

А вообще  с удивлением понял, что мне понравилсь на Джава писать. Раньше думал что это какой то монстр, но за пару месяцев работы изменил мнение. Очень классно заточена под ООП, многие вещи, как например вебсервер реализуются буквально парой строчек кода.  Создание АПи с помощью Спринг - прям вообще очень продуманное. Не нужно заморачиваться с импортами, как в Питоне, стоит только понять логику Джавы. 
Даже подумываю посмотреть в сторону Котлина, хоть и не поклонник андроидов, но на нем писать аппликухи - милое дело и в 4 раза легче джавы. 

Ну и компиляторы да, рулят)

Aisamiery
На сайте с 12.04.2015
Offline
320
#2
Sly32 #:
как например вебсервер реализуются буквально парой строчек кода

ну на го одной, если такой критерий выбора =))

Sly32 #:
Даже подумываю посмотреть в сторону Котлина, хоть и не поклонник андроидов

Да на котлине можно и под Spring так то писать и есть вообще https://habr.com/ru/companies/otus/articles/751192/

Все, что вам нужно знать о Kotlin Multiplatform
Все, что вам нужно знать о Kotlin Multiplatform
  • 2023.07.29
  • habr.com
Kotlin Multiplatform — это набор для разработки программного обеспечения, который значительно лучше других вариантов разработки кроссплатформенных приложений. В этом руководстве по Kotlin multiplatform вы подробно узнаете все об этом наборе. Что такое Kotlin Multiplatform? Kotlin multiplatform — это фича, появившаяся в 2017 году вместе с Kotlin...
Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
S3
На сайте с 29.03.2012
Offline
357
#3
Aisamiery #:

ну на го одной, если такой критерий выбора =))

Да на котлине можно и под Spring так то писать и есть вообще https://habr.com/ru/companies/otus/articles/751192/

Го мне тоже интересен. Он клаасный и бомбически быстрый. Джава тяжелая по сравнению с котлином, поэтому и смотрю в котлин со спрингом. Очень удобно в спринге разворачивать сервисы. 

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий