javascript
关于Spring Cloud Zuul网管上传文件乱码问题
Spring Cloud Zuul現在對于上傳文件有兩種處理方式,一種是用spring mvc,另一種是zuulServlet。spring mvc對文件處理不是很好,會導致亂碼問題,zuulServlet則不會。
那么怎么樣讓文件使用zuulServlet方式上傳呢?現在普遍的解決方案是給url加上 /zuul的前綴,這確實是正確的,因為加了之后過濾器會使用zuulServlet。
關于過濾器的知識,下面這個鏈接解釋的挺詳細了
http://blog.didispace.com/spr...
在過濾器中,有一個pre的過濾器 ServletDetectionFilter,他的執行順序是-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; }在這個方法中,IS_DISPATCHER_SERVLET_REQUEST_KEY為false就會用ZuulServlet處理。如果沒加/zuul前綴,IS_DISPATCHER_SERVLET_REQUEST_KEY就會置為true,就會用spring mvc上傳。會出現亂碼問題。
那么我們的一個解決方案是在在進入下一個過濾器之前我們就把我們的文件上傳的請求用ZuulServlet處理,所以我們可以重寫這個方法,根據contentType判斷請求如果是multipart就將IS_DISPATCHER_SERVLET_REQUEST_KEY置為false,那么它就會用ZuulServlet處理。
到這里還沒有結束,還有一個很坑的地方,在最后以前pre過濾器中,他會對url進行處理。如果該請求是ZuulServlet處理的,那么他會把url的前面幾位用的zuulServletPath替代,zuulServletPath默認就是剛才我們替代的前綴 /zuul。那么如果你不處理的話,你的請求路徑將會變化。所以在這里我們將這個默認的zuulServletPath改成空值,就不會替換啦。在配置文件里面加上:
zuul.servletPath:
后面的值不填。
到這里,問題算是結束了,最后把我們重寫的那個方法注入到spring。
總結
以上是生活随笔為你收集整理的关于Spring Cloud Zuul网管上传文件乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】多语言的正则表达式,我们应该掌握
- 下一篇: A JWT old for new ex