React+Spring 크로스 도 메 인 문제 의 완벽 한 해결 방법
react 크로스 도 메 인 방문 배경,기본 값 은 크로스 도 메 인 문제 이 고 화 호 와 구 글 브 라 우 저 는 크로스 도 메 인 문제 에 대한 전시 가 다 릅 니 다.
구 글 브 라 우 저 는 다음 과 같다.
이 상 태 는 200 이지 만 Response 에 서 는 아무런 정보 가 없습니다.다음 그림 입 니 다.
그러나 화 호 브 라 우 저 는 이 문제 에 대한 설명 이 아주 맑 습 니 다.
화 호 브 라 우 저 는 도 메 인 을 뛰 어 넘 었 습 니 다.react 도 메 인 을 뛰 어 넘 는 게시 물 에 대해 인터넷 에 도 관련 게시 물이 있 습 니 다.검색 하 는 방법 은 모두 다음 과 같은 해결 방식 입 니 다.
creat-react-app 을 통 해 구 축 된 프로젝트 라면 package.json 파일 의 루트 디 렉 터 리 에"proxy"를 추가 하 십시오."http://api.xxxx.com"프로젝트 에 여러 개의 ip 인 터 페 이 스 를 호출 해 야 한다 면 다음 설정 을 사용 하 십시오.
"proxy": {
"/api/RoomApi": {
"target": "http://open.douyucdn.cn",
"changeOrigin":true
},
"/api/v1":{
"target":"http://capi.douyucdn.cn",
"changeOrigin":true
}
}
설정 이 완 료 된 후에 도 인 터 페 이 스 를 다시 방문 하면 똑 같은 크로스 도 메 인 문제 가 발생 합 니 다.recat 의 설정 이 크로스 도 메 인 문 제 를 해결 하지 못 한 이상 저 는 생각 을 spring 으로 옮 겨 서 spring 에서 크로스 도 메 인 을 처리 하 겠 습 니 다.
package com.gg.interceptor;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class ProcessInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler)
throws Exception {
// TODO Auto-generated method stub
// http://localhost:8000,http://localhost:8000
List<String> whileList = new Vector<String>();
whileList.add("http://127.0.0.1:8000");
whileList.add("http://localhost:8000");
String clientIp = httpServletRequest.getHeader("origin");
boolean status = false;
for(String ip : whileList) {
if(clientIp!=null&&clientIp.equals(ip)) {
status = true;
break;
}
}
/**
* httpServletResponse.setHeader("Access-Control-Allow-Origin","*"); , , ip, :http://127.0.0.1:8000
* */
httpServletResponse.setHeader("Access-Control-Allow-Origin",status?clientIp:null);
//
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
//
httpServletResponse.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
httpServletResponse.setHeader("X-Powered-By","Jetty");
httpServletResponse.setHeader("Access-Control-Allow-Credentials","true");
String method= httpServletRequest.getMethod();
if (method.equals("OPTIONS")){
httpServletResponse.setStatus(200);
return false;
}
System.out.println(method+",status:"+status+",clientIp:"+clientIp);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
react 클 라 이언 트 코드 는 다음 과 같 습 니 다.Model 계층 js 코드:
*login({ payload }, { call, put }){
let formData = new FormData();
formData.append("loginId",payload.loginId);//
formData.append("passWord",payload.passWord);//
const response = yield call(requestGuangGao, formData);
yield put({
type: 'changeLoginStatus',
payload: response,
});
},
api 계층 js 코드:
export async function requestGuangGao(formData){
// let formData = new FormData();
// formData.append("loginId",params.loginId);
// formData.append("passWord",params.passWord);
console.log("requestGua >url :" );
return request('http://127.0.0.1:8080/guanggao/userController/login.do', {
method: 'POST',
mode: 'cors',
body:formData,
});
}
아래 설정 을 통 해 react 크로스 도 메 인 문 제 를 처리 할 수 있 습 니 다.총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 React+Spring 이 크로스 오 버 문 제 를 해결 하 는 완벽 한 방법 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx 에서 사이트 아이콘 표시 설정전단 개발 환경: react:^16.4.1 webpack:^4.16.0 웹 팩 에 favicon. ico 설정 추가: nginx 는 ico 에 대한 지원 을 추가 합 니 다:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.