zuul 리 트 윗 후 서 비 스 는 요청 경로 의 해결 을 찾 을 수 없습니다.

zuul 리 트 윗 후 서비스 에서 요청 경 로 를 찾 을 수 없습니다.
문제.
서로 다른 경로 의 항목 이름 을 가 져 오고 데이터 원본 을 동적 으로 설정 하 기 를 원 하지만 zuul 게 이 트 웨 이 를 거 친 후 뒤의 서비스 에서 요청 경 로 를 가 져 올 수 없습니다.
해결 하 다.
Header:x-forward-prefix 를 통 해 가 져 오기
테스트 코드:

    @GetMapping("/a")
    public String a(HttpServletRequest request) {
        StringBuilder result = new StringBuilder();
        result.append("getMethod:" + request.getMethod() + "
\r"); result.append("getRequestURL:" + request.getRequestURL() + "
\r"); result.append("getServletPath:" + request.getServletPath() + "
\r"); result.append("getContextPath:" + request.getContextPath() + "
\r"); result.append("getPathInfo:" + request.getPathInfo() + "
\r"); result.append("---------------------------------------------------" + "
\r"); Enumeration<String> es = request.getHeaderNames(); while (es.hasMoreElements()) { result.append(es.nextElement() + ":" + request.getHeader(es.nextElement()) + "
\r"); } return result.toString(); }
결과 되 돌리 기:
这里写图片描述
경로 가 빨간색 으로 표 시 된 곳 은 x-forward-prefix 머리 에 있 는 내용 과 같 기 때문에 request.getHeader('x-forward-prefix')를 사용 하면 현재 방문 한 항목 을 가 져 와 구분 할 수 있 습 니 다.
사고 하 다.
zuul 리 트 윗 요청 을 할 때 사용 하 는 에이전트 때 문인 것 으로 추정 되 며,로 컬 은 직접 방문 하 는 것 과 같 습 니 다.http://localhost:9070/a따라서 처음 입력 한 경 로 를 가 져 올 수 없습니다.x-forward-prefix 이 머리 는 브 라 우 저 에서 보 낼 때의 접근 주 소 를 기록 하 는 데 사 용 됩 니 다.
질문
최근 에 spring cloud 를 배 웠 는데 zuul 을 사용 하 는 과정 에서 주소 가 전송 되 지 않 았 고 페이지 가 404 를 잘못 보 냈 습 니 다.
사용 하 는 Spring cloud 버 전 은 최신 Greenwich 입 니 다.
zuul 에서 설정 한 파일 의 내용 은?

server:
  port: 8180
spring:
  application:
    name: zuul-test
zuul:
  routes:
    hello:
      path: /hello/**
      url: http://localhost:9180/
웹 요청http://localhost:8180/hello?name=world 점프http://localhost:9180/hello?neam=world "hello World"를 인쇄 하 였 으 나,사실상 오류 가 발생 하지 않 았 습 니 다.페이지 알림 404.
처음에는 Spring cloud 버 전이 너무 높다 고 생각 하고 순수한 미소 블 로그 의 demo 를 다운로드 해 테스트 한 결과 여전히 그 랬 다.
zuul 을 의심 하 는 요청 은 바로 넘 어 가 는 거 예요.http://localhost:9180/ 그런데 문맥'hello'를 붙 이지 않 았 어 요.
그래서 설정 을 다음 과 같이 변경 합 니 다:

server:
  port: 8180
spring:
  application:
    name: zuul-test
zuul:
  routes:
    hello:
      path: /hello/**
      url: http://localhost:9180/hello
점프 성공 을 요청 합 니 다.
자신의 추측 이기 때문에 코드 지원 이 필요 하기 때문에 정지점 에서 소스 코드 를 디 버 깅 하여 확인 합 니 다.
org.spring from work.cloud.netflix.zul.filers.route.Simple Host Routing Filter\#run 방법 에서 통과

String uri = this.helper.buildZuulRequestURI(request);
uri=""를 분석 한 다음 현재 클래스 의 forward 방법 으로 요청 파 라 메 터 를 조직 하여 전송 합 니 다.
원본 코드 는 아래 와 같다.

중요 한 것 은 그림 의 빨 간 상자 부분 입 니 다.퍼 가기 주소 가 컨 텍스트 를 가지 고 있 지 않 으 면 host.getPath()가 가 져 온 값 은'''이 고 이전에 가 져 온 uri 와 연결 한 값 은'''입 니 다.
323 줄 통과

buildHttpRequest(verb, uri, entity, headers, params,request);
가 져 온 httpRequest 의 uri 는?name=World,전송 요청 주소 변경http://localhost:9180/?name=world당연히
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기