Angular - Maven / Spring Boot CORS не работает - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь настроить приложение, которое имеет Angular интерфейс и серверную часть Maven / Spring Boot, и настроило мой первый контроллер REST. Моя проблема заключается в том, что когда я отправляю HTTP-запрос GET на серверную часть из моей Angular IDE, он возвращает сообщение об ошибке:

"Доступ к XMLHttpRequest по адресу http://localhost: 8080 / api / getData 'from origin' http://localhost: 4200 'заблокировано политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». "

Я сбит с толку, так как я настроил «doFilter» для приема всех запросов из любого источника, поэтому он не должен выдавать эту ошибку. Мой код выглядит следующим образом:

Мой APIController:

package com.SSCCoursework.controller;

import com.SSCCoursework.Model.SharePrice;
import com.SSCCoursework.Model.Shares;
import com.SSCCoursework.Model.SharesList;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@CrossOrigin (origins = "http://localhost:4200", maxAge = 3600)
@RestController
public class ApiController
{ 
    File Shares_File = new File("Shares_Data.xml");
    ArrayList<Shares> shareList = new ArrayList<Shares>();

    @RequestMapping(value="/api/getData", produces="application/JSON")
    public Object getData()
    {   
        Shares share1 = new Shares();
        SharePrice share1_2 = new SharePrice();
        share1.setCompanyName("test");
        share1.setCompanySymbol("test");
        share1.setNumOfShares(123);
        Date date = new Date();
        share1.setLastShareUpdate(date);
        share1_2.setCurrency("dollar");
        share1_2.setValue(12345f);
        share1.setSharePrice(share1_2);
        shareList.add(share1);

        SharesList sharelist = new SharesList();
        sharelist.setBookList(shareList);

        return share1;
    }
}

Мой SimpleCORSFilter:

package com.SSCCoursework.Security;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;

@Component
public class SimpleCORSFilter 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");

        if (req.getMethod().equals("OPTIONS")) 
        {
            res.setStatus(HttpServletResponse.SC_OK);
            return;
        }

        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() 
    {

    }
}

Мой Angular код просто пытается использовать метод GET (это. httpClient.get ('http://localhost: 8080 / api / getData ') для печати данных в консоль браузера, но из-за ошибки они не работают. Я пропустил шаг в своем бэкэнде?

1 Ответ

0 голосов
/ 09 января 2020

вы можете легко определить глобальную конфигурацию cors, просто добавив в свой основной класс приложения, где вы запускаете свое приложение весенней загрузки

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

, для получения более подробной информации посмотрите здесь

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