Spring Boot, Cors и Spring Security - PullRequest
       10

Spring Boot, Cors и Spring Security

0 голосов
/ 22 февраля 2019

Я использую Spring Boot версии 2.0.8.RELEASE и модуль spring-boot-start-security.Я пытаюсь защитить свои конечные точки чванства с помощью базовой аутентификации, и пока все идет хорошо.Тем не менее, запросы из JavaScript в моем коде начали сбой со следующей ошибкой

Access to XMLHttpRequest at 'http://my-service.com.com/search/api/getQuery' from origin 'http://myui.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

У меня определен следующий класс конфигурации

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //See https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-cors-global-java for configuring cors
        registry.addMapping("/**").allowedOrigins("*").allowedMethods("*").allowedHeaders("*");
    }

}

У меня есть аннотация @CrossOrigin в моем APIУчебный класс.И у меня есть следующий класс для настройки моей безопасности

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    protected void configure(HttpSecurity http) throws Exception {
        http.cors()
             .and()
             .csrf().disable()
                .authorizeRequests()
                    .antMatchers("/v2").authenticated()
                    .antMatchers("/swagger-resources").authenticated()
                    .antMatchers("/swagger-ui.html").authenticated()                    
                    .and()
                    .httpBasic()
                    .and()
                    .authorizeRequests()    
                        .antMatchers("/**").permitAll()
                        .and();        

    }

    }

Я попытался создать CorsConfiguration в классе безопасности и удалить аннотацию @CrossOrigin, но это тоже не сработало.Любая идея, что мне нужно сделать, чтобы заставить Cors работать правильно на Spring Boot 2.0.8.RELEASE?

Спасибо Дэмиен

1 Ответ

0 голосов
/ 22 февраля 2019

По моему опыту, Spring Annotations никогда не решает проблему CORS успешно.Решение, которое я выбрал, заключается в маршрутизации обоих серверов (в моем случае Node и Tomcat) через виртуальный хост.

В моем конфигурационном файле Apache httpd-vhosts у меня есть следующая настройка:

    ProxyRequests Off
    ProxyPreserveHost Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location /FrontEndServer>
        ProxyPass        http://localhost:8080/FrontEndServer connectiontimeout=333 timeout=999
        ProxyPassReverse http://localhost:8080/FrontEndServer
    </Location>

    <Location />
        ProxyPass        http://localhost:3000/ connectiontimeout=333 timeout=999
        ProxyPassReverse http://localhost:3000/
    </Location>

В этой настройке мои два сервера работают на разных портах, но Apache перенаправляет их так, чтобыони могут использовать мой локальный хост и различаться просто с помощью "/" или "/FrontEndServer".

Очевидно, что это специфично для Apache, и это может не соответствовать используемой вами настройке.Однако вы должны быть в состоянии использовать эти принципы, чтобы найти решение для вашей конкретной ситуации.Надеюсь это поможет.

...