В чем разница между аннотацией @CrossOrigin http.csrf (). Disable ()? - PullRequest
0 голосов
/ 05 января 2019

Этот вопрос относится к Отключить аутентификацию Keycloak для определенного URL в весенней загрузке

У меня есть сторонняя панель инструментов, которая управляет моим интерфейсом через iFrame. Но он вызывает мой поиск API непосредственно через его виджет поиска. Код, упомянутый ниже, не решает проблему CORS только для этого API поиска и отправляет эту ошибку enter image description here Все остальные API работают без сбоев.

    @Override
protected void configure(@Nonnull final HttpSecurity http) throws Exception {
    super.configure(http);

    http.csrf().disable();

    http
            .cors()
            .and()
            .authorizeRequests()
            .antMatchers("/health", "/error").permitAll()
            .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
            .anyRequest().authenticated();
}

Теперь я добавил следующий код на мой контроллер, и он начал работать:

@CrossOrigin(origins = "https://dashboard-url")

так

  1. Это правильный способ сделать это? Есть ли подводные камни, использующие это?
  2. В чем разница между этими двумя, что отсутствует в моем предыдущем подходе.
  3. У меня есть 3 этапа (dev / stage / prod), на которые мне может понадобиться добавить аннотацию @CrossOrigin, любые предложения, как поступить. Я могу использовать профили, но у prod нет специального тега -prod , например. У dev и stage есть следующий URL: dashboard-dev.com/dashboard-stage.com. Но у prod есть только dashboard.com.

1 Ответ

0 голосов
/ 11 марта 2019

Да, то, что вы делаете правильно

Пожалуйста, проверьте URL

  1. https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
  2. https://docs.spring.io/spring-security/site/docs/5.1.3.RELEASE/reference/html5/#cors

Если вы используете Spring Security, обязательно включите CORS на уровне Spring Security, чтобы позволить ему использовать конфигурацию, определенную на уровне Spring MVC.

Итак, в соответствии с вашим кодированием, вы включили cors в безопасности, используя http.cors (), и поскольку не определен corsConfigurationSource (фильтр CORS), он использует уровень MVC, определенный с помощью @CORS (***)

Однако, если вы хотите, чтобы значения были динамическими, вы можете использовать, как показано ниже, со значениями, извлекаемыми из внешних файлов на основе env

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