Настройка CORS - PullRequest
       3

Настройка CORS

0 голосов
/ 22 сентября 2019

У меня REST-сервер, написанный при весенней загрузке, а затем у меня есть веб-сервер (IIS работает на Windows, есть только файлы html / css / js и web.config).Приложение должно работать только в локальной сети, и я не знаю, как настроить CORS.

Веб-сервер работает на docmanager.com, а REST-сервер работает на docmanager.com:8443, оба на одном компьютере.Проблема в том, что мне нужно было настроить сервер REST следующим образом:

@Component
 @Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsConfig implements Filter {

   @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

        @Override
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
            HttpServletResponse response = (HttpServletResponse) res;
            HttpServletRequest request = (HttpServletRequest) req;


            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
            response.setHeader("Access-Control-Max-Age","3600");
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, content-type, access-control-alow-origin");

            if("OPTIONS".equalsIgnoreCase(request.getMethod())){
                response.setStatus(HttpServletResponse.SC_OK);
                response.setHeader("Access-Control-Allow-Origin", "*");
                response.setHeader("Access-Control-Allow-Origin", "*");
                response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
                response.setHeader("Access-Control-Max-Age","3600");
                response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, content-type, access-control-alow-origin");
            } else {
                chain.doFilter(req, res);
            }

      //      chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request), response);
        }


        @Override
        public void destroy() {

        }
    }

Когда я использую вместо Access-Control-Allow-Origin: * -> Acess-Control-Allow-Origin: docmanager.com:443, то не работает.Я также тестирую его на том же компьютере.Как мне настроить этот CORS?Я использовал его с "*" во время разработки, но мне нужно подготовить его к распространению, но я не знаю, как настроить CORS для этой локальной сети ... Можно ли как-то избежать полной настройки CORS с моей настройкой (веб-сервер, сервер отдыха и т.д ...)?

Спасибо за помощь :)

1 Ответ

1 голос
/ 22 сентября 2019

Как вы упомянули, ваш веб-сервер находится на другом порту, а REST-сервер на другом порту

В этом случае CORS определенно появится на рисунке.

Конфигурация выглядит правильно.

Я думаю, что проблема в доменном имени, которое вы устанавливаете

docmanager.com:443

Не уверен в этом, но должно быть что-то вроде этого

https://docmanager.com

Попробуйте проверить браузер и получить точное значение.

On Side note

Что вы делаете, это добавляете Filter и для каждой информации заголовка настройки запроса.

Поскольку вы используете Spring-boot, есть более чистый способ сделать это

С WebMvcConfigurerAdapter

@Configuration
//@EnableWebMvc
public class CorsConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("https://docmanager.com")
                .allowedMethods("GET", "POST");
    }
}

С WebSecurity

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()
            //other config
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource()
    {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("https://docmanager.com"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}

Подробнее здесь и здесь

Редактировать 1:

Добавление ещеdetail

1 Вы можете добавить все методы в список массивов.

2 ОПЦИИ (предварительно обработанные запросы) автоматически обрабатываются Spring.

Вот цитата

CORS-запросы (включая предварительные запросы методом OPTIONS) автоматически отправляются различным зарегистрированным HandlerMappings.Они обрабатывают предварительные запросы CORS и перехватывают простые и актуальные запросы CORS благодаря реализации CorsProcessor (по умолчанию DefaultCorsProcessor) для добавления соответствующих заголовков ответов CORS (например, Access-Control-Allow-Origin).CorsConfiguration позволяет вам указать, как должны обрабатываться запросы CORS: разрешенные источники, заголовки, методы и т. Д.

Подробнее об этом здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...