Spring Cloud Zuul 네트워크 관리자 업로드 파일 코드 문제

1706 단어
텍스트 링크:https://segmentfault.com/a/1190000011650034
Spring Cloud Zuul은 현재 업로드 파일에 대해 두 가지 처리 방식을 가지고 있는데, 하나는 spring mvc이고, 다른 하나는 zuulServlet이다.spring mvc는 파일 처리가 잘 되지 않아 부호화 문제를 초래할 수 있으며,zuulServlet은 그렇지 않습니다.
그러면 어떻게 파일을 주울서브렛 방식으로 업로드합니까?현재 보편적인 해결 방안은 URL에/zuul의 접두사를 붙이는 것입니다. 이것은 확실히 정확합니다. 왜냐하면 추가된 필터는 zuulServlet을 사용하기 때문입니다.
필터에 대한 지식은 아래 링크가 상세하게 설명되어 있습니다http://blog.didispace.com/spr...
필터에는 pre 필터 서브렛DetectionFilter가 있습니다. 필터의 실행 순서는 -3이고 가장 먼저 실행되는 필터입니다. 이 필터에는 다음과 같은 코드가 있습니다.
@Override
public Object run() {
    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();
    if (!(request instanceof HttpServletRequestWrapper) 
            && isDispatcherServletRequest(request)) {
        ctx.set(IS_DISPATCHER_SERVLET_REQUEST_KEY, true);
    } else {
        ctx.set(IS_DISPATCHER_SERVLET_REQUEST_KEY, false);
    }

    return null;
}

이 방법에서 ISDISPATCHER_SERVLET_REQUEST_KEY가 false이면 ZuulServlet으로 처리됩니다./zuul 접두어가 없으면 ISDISPATCHER_SERVLET_REQUEST_KEY는true로 설정되고spring mvc로 업로드됩니다.부호화 문제가 발생할 수 있습니다.
그러면 우리의 해결 방안은 다음 필터에 들어가기 전에 우리의 파일을 업로드하는 요청을 ZuulServlet으로 처리하는 것입니다. 따라서 이 방법을 다시 쓸 수 있습니다. 콘텐츠Type에 따라 요청이 multipart라면 IS 를 판단합니다.DISPATCHER_SERVLET_REQUEST_KEY가false로 설정되면 ZuulServlet으로 처리됩니다.
여기까지는 아직 끝나지 않았습니다. 아주 구덩이가 있습니다. 마지막 이전에pre필터에서 url을 처리합니다.만약 이 요청이 ZuulServlet에서 처리된다면, 그는 URL의 앞부분에 있는 ZuulServletPath를 대체할 것입니다. ZuulServletPath는 기본적으로 아까 우리가 대체한 접두사/zuul입니다.만약 당신이 처리하지 않는다면, 당신의 요청 경로가 바뀔 것입니다.그래서 여기서 우리는 이 기본 zuulServletPath를 빈 값으로 바꾸면 바꾸지 않을 것이다.구성 파일에 다음을 추가합니다.servletPath: 뒤에 있는 값은 채워지지 않습니다.여기까지, 문제는 끝난 셈이다. 마지막으로 우리가 다시 쓴 그 방법을 스프링에 주입한다.

좋은 웹페이지 즐겨찾기