spring cloud zuul 헤더 전송 추가
OAuth 2.0 전송 권한 인증 을 사용 합 니 다.다른 항목 을 호출 할 때 token 을 가 져 오기 위해 서 는 token 에서 다른 서비스 로 전송 해 야 합 니 다.
@Component
public class KeyUserFilter extends ZuulFilter {
private static final Logger logger = LoggerFactory.getLogger(KeyUserFilter.class);
@Override
public Object run() {
// TODO Auto-generated method stub
String keyCloakUser = CurrentUser.getInstance().getCurrentAuditor();
String keyCloakUserName = CurrentUser.getInstance().getCurrentAuditorName();
String nickname = CurrentUser.getInstance().getCurrentNickname();
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest req = (HttpServletRequest)RequestContext.getCurrentContext().getRequest();
requestContext.addZuulRequestHeader("authorization", req.getHeader("authorization"));
return null;
}
@Override
public boolean shouldFilter() {
// TODO Auto-generated method stub
return true; // filter,true ,false
}
@Override
public int filterOrder() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String filterType() {
// TODO Auto-generated method stub
return "pre"; // filter , pre、route、post、error
}
}
다른 서비스 에 서 는 HttpServletRequest 를 사용 하여 getHeader 방법 으로 Token 값 을 가 져 온 다음 다른 호출 에 전송 합 니 다.spring cloud zuul 전송 매개 변수 수정
springcloud zuul 을 사용 하여 각 대응 하 는 서비스 에 전송 요청 을 합 니 다.요청 권한 을 검사 하 는 것 과 같은 zuul 차단 기 를 넣 을 수 있 습 니 다.어떤 때 는 리 트 윗 할 때 가 져 갈 수 있 는 대응 하 는 매개 변 수 를 증가 하거나 줄 여야 합 니 다.
퍼 가기 매개 변 수 를 추가 하 는 코드 를 붙이다.
public static void setReqParams() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
// get , ... [ 1]
request.getParameterMap();
Map<String, List<String>> requestQueryParams = ctx.getRequestQueryParams();
if (requestQueryParams==null) {
requestQueryParams=new HashMap<>();
}
// , , ,
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("1");
requestQueryParams.put("test", arrayList);
ctx.setRequestQueryParams(requestQueryParams);
}
간단 한 코드 몇 줄,중요 한 것 은 마지막 줄 입 니 다.
ctx.setRequestQueryParams(requestQueryParams);
이 put("requestQueryParams",qp);원본 코드 에서 전송 할 때 이 키 의 인자 값 을 가 져 옵 니 다.그 러 니까 zuul 이 리 트 윗 요청 을 할 때 최종 적 으로 이 걸 가 져 온 거 야.
그 다음 에[주 1],이 곳 은 일반적으로 filter 의 filter Order(),즉 필터 순서 가 늦게 설정 되 어 있 으 면 이 코드 가 필요 하지 않 아 도 됩 니 다.실행 순서 가 늦 은 것 은 프레임 에 설 정 된 filter 가 한 번 실 행 된 것 이다)
그러나 만약 당신 의 실행 순서 가 0,즉 가장 먼저 실행 된다 면,이러한 코드 는 없어 서 는 안 됩 니 다.이 코드 가 없 으 면 값 이 없 을 것 이 고,전달 파 라 메 터 를 수정 하 는 목적 을 달성 할 수 없습니다.(이전에 소스 코드 와 문 서 를 보지 않 았 고,request 에서 꺼 낸 값 을 하나하나 set 에 넣 어서 파 라 메 터 를 중복 시 켰 습 니 다.)
스 트림 방식 으로 정 의 된 매개 변 수 를 꺼 내 set 로 들 어가 면 뒤의 마이크로 서 비 스 를 쉽게 얻 을 수 있 습 니 다.관련 수치 코드 를 줄 일 수 있 습 니 다.
이런 거 예요.
ServletInputStream inputStream = request.getInputStream();
String copyToString = StreamUtils.copyToString(inputStream, Charset.forName(“UTF-8”));
문자열(문자열 의 형식 json 이나 xml 모두 가능)을 꺼 내 서 set 로 들 어가 면 됩 니 다.헤 더 를 통 해 헤 더 를 통 해 정 보 를 전달 하 는 것 도 있다.
단점:헤더 가 중국 어 를 전달 하려 면 특수 처리 가 필요 하 다.
게 이 트 웨 이
RequestContext ctx = RequestContext.getCurrentContext();
ctx.addZuulRequestHeader("original_requestURL",request.getRequestURL().toString());
서브 시스템
request.getHeader("original_requestURL")
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.