<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Spring Boot 使用 Tomcat 作為容器時訪問根 context-path 302分析

      起因是安全團隊反饋了一個漏洞,說通過公網域名訪問內網中的一個SpringBoot服務的根路徑,原本是域名的url變成了服務的內網的ip。

      簡略版的網絡拓撲如下:
      image

      SpringBoot版本:2.2.5.RELEASE
      server.servlet.context-path=/demo
      

      通過域名訪問的url如下:

      https://domain.cn/demo
      

      訪問之后url轉變為:

      http://10.x.1/demo/
      

      因為網關后面的SpringBoot服務在多個機器部署,轉變后的url會變成其中的一臺服務器的ip。

      在nginx機器上看了下日志,發現請求有一個302重定向的過程,然后變成了SpringBoot的404頁面,因為根路徑沒有對應的handler處理。

      Whitelabel Error Page
      This application has no explicit mapping for /error, so you are seeing this as a fallback.
      
      Fri Apr 10 23:59:59 CST 2025
      There was an unexpected error (type=Not Found, status=404).
      No message available
      

      測試環境,在Chrome中打開F12調試模式,在Network下開啟Preserve log,通過SpringBoot服務所在機器的ip和端口直接訪問服務的根路徑,同樣有一個302重定向的過程

      http://10.x.1/demo
      會轉變為
      http://10.x.1/demo/
      

      url在302重定向后,url后面拼接了一個 /

      懷疑是不是SpringBoot有什么特殊處理,SpringBoot中是通過org.springframework.web.servlet.DispatcherServlet:doDispatch方法來分發處理請求的,本地調試項目發現doDispatch方法會進入兩次,DispatcherServlet上面是tomcat容器了,看樣子是容器里了,往上回溯調用鏈發現org.apache.catalina.mapper.Mapper:internalMapWrapper方法里有一段代碼有關于重定向的邏輯,代碼如下:

      if(mappingData.wrapper == null && noServletPath &&
              contextVersion.object.getMapperContextRootRedirectEnabled()) {
          // The path is empty, redirect to "/"
          path.append('/');
          pathEnd = path.getEnd();
          mappingData.redirectPath.setChars
              (path.getBuffer(), pathOffset, pathEnd - pathOffset);
          path.setEnd(pathEnd - 1);
          return;
      }
      

      意思就是如果請求的路徑是 "" ,那么將重定向到 / ,項目的 server.servlet.context-path=/demo,那么訪問根路徑,后面不加其它的url,正好就走到了這一個邏輯里面,看代碼邏輯是有一個參數可以控制是否重定向的:mapperContextRootRedirectEnabled,這個是org.apache.catalina.core.StandardContext類中的一個配置參數,可以通過配置來修改

      server.tomcat.redirect-context-root
      

      貼一下它的注釋:

      Determines if requests for a web application context root will be
      redirected (adding a trailing slash) by the Mapper. This is more
      efficient but has the side effect of confirming that the context path is
      valid.
      

      修改參數的值為false,重啟項目再次訪問,不再出現302,而是直接到了404頁面

      server.tomcat.redirect-context-root=false
      

      如果項目的context-path是 / 沒有302重定向的過程。

      有項目使用了undertow作為容器,但是看了下undertow的代碼,發現沒有提供類似的參數,后面寫一篇文章來記錄使用undertow作為容器時出現這樣情況的解決方案。

      tomcat作為老牌的容器,相較undertow還是有更多靈活的配置選項。

      posted @ 2025-06-25 08:34  杜勁松  閱讀(113)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美 喷水 xxxx| 米脂县| 亚洲熟妇在线视频观看| 亚洲国产精品色一区二区| 中文字幕av无码免费一区| 国产精品一区二区三区性色| 亚洲综合国产成人丁香五| 国产偷国产偷亚洲高清午夜 | 国产中文三级全黄| 久久久精品94久久精品| 国产精品天天看天天狠| 国产宅男宅女精品A片在线观看| 97欧美精品系列一区二区| jlzz大jlzz大全免费| 不卡国产一区二区三区| 国产欧美日韩va另类在线播放| 亚洲高清WWW色好看美女| 国产精一品亚洲二区在线播放| 精品不卡一区二区三区| 福利一区二区在线视频| 福利一区二区视频在线| 亚洲精品午夜国产VA久久成人| www插插插无码免费视频网站 | 中文字幕国产精品资源| 日本丶国产丶欧美色综合| 国产精品视频第一第二区| 先锋影音男人av资源| 国产在线国偷精品免费看| 荡乳尤物h| 国产精品国产精品偷麻豆| 一级女性全黄久久片免费| 亚洲精品午夜国产VA久久成人| 肥臀浪妇太爽了快点再快点 | 欧美大胆老熟妇乱子伦视频| 2018天天拍拍天天爽视频| 欧美中文亚洲v在线| 亚洲av无在线播放中文| 免费黄色大全一区二区三区| 人妻夜夜爽天天爽一区| 亚洲不卡一区三区三区四| 国产精品久久国产精麻豆99网站 |