Проблема с загрузкой и отдыхом в Angular 6 для Spring - PullRequest
0 голосов
/ 01 ноября 2018

Я создал угловое 6 приложение. Развернул его на AWS S3 bucket как статический веб-хостинг. Со стороны бэкэнда я создал весеннее загрузочное приложение, которое предоставляет остальные службы и имеет аннотацию на уровне контроллера и метода CroosOrigin. Он также развернут на экземпляре AWS tomcat EC2.

Когда я пытаюсь нажать кнопку в угловом приложении, оно пытается вызвать развернутый веб-сервис Spring Rest. На консоли я получаю политику CORS: Ответ на предполётный запрос не проходит проверку контроля доступа: у него нет статуса HTTP ok.

Когда я пытаюсь позвонить в эти службы почтальоном, он работает нормально. Я добавил расширение Chrome для CORS в моем Chrome.

Кто-нибудь может мне помочь, почему он не работает, когда я пытаюсь вызвать ту же услугу из приложения angular.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

В Spring Boot вы можете включить глобальный CORS - объявить класс @Configuration CorsConfig с определением @Bean WebMvcConfigurer с переопределением addCorsMappings

@Configuration
public class CorsConfig {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE").allowedOrigins("*")
                        .allowedHeaders("*");
            }
        };
    }
}

Или определить класс MvcConfig с инструментами WebMvcConfigurer, затем переопределить addCorsMappings. как ниже:

@Configuration
public class MvcConfig implements WebMvcConfigurer {
      @Override
      public void addCorsMappings(CorsRegistry registry) {
         registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE").allowedOrigins("*")
                            .allowedHeaders("*");
                }
            };
        }
}
0 голосов
/ 01 ноября 2018

Попробуйте добавить такой класс фильтра в приложение весенней загрузки:

@Component
public class CorsFilter implements Filter {

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

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

        res.setHeader("Access-Control-Allow-Origin", "*");
        res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
        res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Accept-Language, Host, Referer, Connection, User-Agent, authorization, sw-useragent, sw-version");

        // Just REPLY OK if request method is OPTIONS for CORS (pre-flight)
        if ( req.getMethod().equals("OPTIONS") ) {
            res.setStatus(HttpServletResponse.SC_OK);
            return;
        }
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {} 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...