Кросс блокирует почтовый запрос - PullRequest
2 голосов
/ 19 мая 2019

Я пытаюсь сделать приложение с загрузкой Spring и Angular 7, в которой есть 2 кнопки, одна показывает список, а другая имеет форму, которая позволяет пользователю добавить в базу данных, первая кнопка работает нормально, но второй не работает, я получаю это сообщение каждый раз

Access to XMLHttpRequest at 'http://localhost:8080/add' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

это код, который я использую: это код моего весеннего загрузочного приложения

 @RequestMapping("/showfpy")
    public List<fpy> index() {
        return (List<fpy>) fpyRepository.findAll();
    }

    @PostMapping("/add")
    public  List<fpy> Add(@RequestBody fpy fpy) {
        fpyRepository.save(fpy);
        return fpyRepository.findAll();
    }

это код в моем Angular проекте

  fpy: FPY;
      constructor(private  route: ActivatedRoute, private router: Router, private  fpyservice: FpyServiceService) {
        this.fpy = new FPY();
      }
    onSubmit() {
        console.log(this.fpy.produit + this.fpy.date + this.fpy.val_fpy);
        this.fpyservice.save(this.fpy).subscribe(result => this.gotofpylist());
    }
      ngOnInit() {
      }

      gotofpylist() {
        this.router.navigate(['/showfpy']);
      }

я добавил эту часть моего основного приложения

@Bean
    public FilterRegistrationBean corsFilterRegistration() {
        FilterRegistrationBean registrationBean =
                new FilterRegistrationBean(new CORSFilter());
        registrationBean.setName("CORS Filter");
        registrationBean.addUrlPatterns("/*");
        registrationBean.setOrder(1);
        return registrationBean;}
public class CORSFilter extends GenericFilterBean implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpResponse.setHeader("Access-Control-Allow-Origin", "*");
    //    httpResponse.setHeader("Access-Control-Allow-Methods", "*");
     httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");

        httpResponse.setHeader("Access-Control-Allow-Headers", "*");
       httpResponse.setHeader("Access-Control-Allow-Headers",
               "Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token, X-Csrf-Token, Authorization");

        httpResponse.setHeader("Access-Control-Allow-Credentials", "false");
        httpResponse.setHeader("Access-Control-Max-Age", "3600");

        System.out.println("********** CORS Configuration Completed **********");

        chain.doFilter(request, response);
    }


} // The End...

Ответы [ 3 ]

2 голосов
/ 19 мая 2019

мне удалось решить проблему, если кто-то ищет ответ здесь: просто добавьте Java-класс и добавьте в него следующее:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}
1 голос
/ 19 мая 2019

Я думаю, что эти две строки перекрывают друг друга

httpResponse.setHeader("Access-Control-Allow-Headers", "*");
httpResponse.setHeader("Access-Control-Allow-Headers",
           "Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token, X-Csrf-Token,      Authorization");

Попробуйте удалить вторую.

0 голосов
/ 19 мая 2019

Вы должны настроить конфигурации CORS.Создайте один отдельный класс вместо MainClass следующим образом

WebConfig.java

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
public class WebConfig implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
      HttpServletResponse response = (HttpServletResponse) res;
      HttpServletRequest request = (HttpServletRequest) req;
      System.out.println("WebConfig; "+request.getRequestURI());
      response.setHeader("Access-Control-Allow-Origin", "*");
      response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
      response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With,observe");
      response.setHeader("Access-Control-Max-Age", "3600");
      response.setHeader("Access-Control-Allow-Credentials", "true");
      response.setHeader("Access-Control-Expose-Headers", "Authorization");
      response.addHeader("Access-Control-Expose-Headers", "responseType");
      response.addHeader("Access-Control-Expose-Headers", "observe");
      System.out.println("Request Method: "+request.getMethod());
      if (!(request.getMethod().equalsIgnoreCase("OPTIONS"))) {
          try {
              chain.doFilter(req, res);
          } catch(Exception e) {
              e.printStackTrace();
          }
      } else {
          System.out.println("Pre-flight");
          response.setHeader("Access-Control-Allow-Origin", "*");
          response.setHeader("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT");
          response.setHeader("Access-Control-Max-Age", "3600");
          response.setHeader("Access-Control-Allow-Headers", "Access-Control-Expose-Headers"+"Authorization, content-type,"+
                  "access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with,responseType,observe");
          response.setStatus(HttpServletResponse.SC_OK);
      }

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