spring cloud zuul 헤더 전송 추가

4116 단어 springcloudzuulheader
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")
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기