CORS 크로스 필드 문제 상용 해결 방법 코드 인 스 턴 스

백 엔 드 서버 필터 사용
새 필터:

/**
 *     
 */
public class AccessControlAllowOriginFilter implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException { }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    System.out.println("      ");
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    response.setHeader("Access-Control-Allow-Origin", "*");//          
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Allow-Credentials", "true");    //        header           ,             
    response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin,content-type,x-requested-with,Content-Type,Access-Control-Allow-Headers,Content-Length,Accept,Authorization,X-Requested-With");
    filterChain.doFilter(servletRequest, response);
  }

  @Override
  public void destroy() {}
}
전단 헤더 추가:

$.ajax( {
      url : 'http://c2.zhuzher.com/pdm/know/active?hotelid=808047&sdate=2019-11-09&edate=2019-11-11',
      beforeSend: function (xhr) {
          xhr.setRequestHeader("Access-Control-Allow-Origin", "*"); //        
          xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8");
      },
      type : 'get',
      dataType : 'json',
      data:{},
      success : function(data) {
        alert(1111);
      }
    });
2 백 엔 드 인터페이스 springboot/springmvc 사용 설명
springMVC 버 전 은 4.2 이상 버 전이 어야@CrossOrigin 을 지원 합 니 다.
방법 은 Get 또는 POST 를 가리 켜 야 합 니 다.

로 컬 nginx 역방향 에이전트(추천)
로 컬 다운로드 압축 풀기 nginx,server 프로필 추가:
nginx 의 html 디 렉 터 리 에 놓 여 있 으 면 크로스 도 메 인 설정 을 추가 하지 않 아 도 됩 니 다.그렇지 않 으 면 설정 에 불필요 한 오 류 를 보고 할 수 있 습 니 다.
매번 직접 사용 해 볼 수 있 습 니 다.안 됩 니 다.추가 add헤더 등 설정.

###start      ####
  add_header Access-Control-Allow-Origin '*';
  add_header Access-Control-Allow-Headers Accept,Origin,X-Requested-With,Content-Type,If-Modified-Since,Last-Modified,Content-Length,Content-Range,Range,Content-Description,Content-Disposition;
  add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
  add_header Access-Control-Request-Headers Content-Disposition;
  add_header Access-Control-Allow-Credentials true;

  ###end ###

  server {
    listen    80;
    server_name 127.0.0.1;

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location / {
      root  html;
      index index.html index.htm;
    }
    
    #       ,      
    location /pdm    {
      proxy_pass  http://c2.zhuzher.com/pdm;
    }

  }
  
  server {
    listen    8081;
    server_name 127.0.0.1;

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location / {
      root  html;
      index index.html index.htm;
    }
    
    #       ,      
     location /pdm    {
      proxy_pass http://c2.zhuzher.com/pdm;
      charset utf-8;
      #  proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;    
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

  }
프로젝트 에서 설 정 된 8081 포트 를 직접 호출 하면 됩 니 다.
api.get('//localhost:8081/pdm/user/login',data)
주의 할 점 이 있 습 니 다.Content-Type 이 application/json 이 라면 도 메 인 간 요청 을 보 낼 수 없습니다.여기 서 해결 방법 을 제공 합 니 다.인터페이스 전단 요청 type 으로 변경 하 는 것 입 니 다.
'Content-Type':'text/plain'
데 이 터 를 문자열 로 보 내기:
JSON.stringify(data)
백 엔 드 인 터 페 이 스 는 String 으로 데 이 터 를 받 은 다음 대상 으로 전환 하면 됩 니 다.

@PostMapping("/distributeBatch")
  public ResMsg distributeSaleBatch(@RequestBody String params){
    System.out.println(params);
    //Integer user_id, Integer customer_id
    //Gson       
    List<Map<String, Integer>> fromJson = new Gson().fromJson(params, new TypeToken<List<Map<String, Integer>>>() {
    }.getType());
    System.out.println(new Gson().toJson(fromJson));
    return registeredCustomerService.distributeSaleBatch(fromJson);
  }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기