В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin» (Spring) - PullRequest
0 голосов
/ 21 марта 2019

Я знаю, что на форуме есть много тем об этой проблеме, но до сих пор не нашли решения.

Итак, я развернул два приложения в частной JVM / tomcat 8.5.30 на своем VPS. Один - мой ROOT.war, а другой - admin.war. Они были доступны с http://example.com и http://example.com/admin

До установки сертификата ssl все работало нормально. После его установки и принудительного перенаправления https я столкнулся с проблемой с моим admin.war (теперь они оба доступны с https://example.com и https://example.com/admin)

Мой админ работает с большим количеством jquery (я не могу это изменить), и я получаю эту ошибку каждый раз, когда пытаюсь что-то отправить

Access to XMLHttpRequest at 'http: //example.com/admin/add' from origin 'https: //example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Так что я пытаюсь исправить это с помощью весенней безопасности. В моей конфигурации безопасности у меня есть

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SiteSecurityConfig extends WebSecurityConfigurerAdapter {

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


  @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
        configuration.setAllowedHeaders(Arrays.asList("Access-Control-Allow-Headers"));
        configuration.addExposedHeader("Access-Control-Allow-Headers");
        configuration.setAllowedMethods(Arrays.asList("POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}

Я делаю это как для своего корневого приложения, так и для моего приложения администратора (я не знаю, правильно ли это делать для них обоих). Все еще не работает.

Любая помощь?

спасибо !!

1 Ответ

1 голос
/ 21 марта 2019

Если вы видите ошибку

'http://example.com/admin/add' from origin 'https://example.com' has been blocked

Есть 2 вопроса

1 Полагаю, ваш /add вызов API не перенаправляется на https. В идеале это должно быть https://example.com/admin/add Либо вы решите это

или

2 Измените setAllowedOrigins в вашем приложении администратора на http так же, как это

@Bean
CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("https://example.com", "http://example.com"));
    configuration.setAllowedHeaders(Arrays.asList("Access-Control-Allow-Headers"));
    configuration.addExposedHeader("Access-Control-Allow-Headers");
    configuration.setAllowedMethods(Arrays.asList("POST"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}
...