menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right 002-调试分析 chevron_right 006-Tomcat getContextPath()的处理.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    006-Tomcat getContextPath()的处理.md
    1.12 KB / 2021-07-17 00:01:40
        # Tomcat getContextPath()的处理
    
    在getContextPath()函数中,调用了Request.getContextPath()函数:
    
    ![](images/15893683681961.png)
    
    
    跟进该函数,先是调用getServletContext().getContextPath()来获取当前Servlet上下文路径以及调用getRequestURI()函数获取当前请求的目录路径:
    
    ![](images/15893683744825.png)
    
    
    往下的这段循环是处理uri变量值中如果存在多个连续的/则删除掉:
    
    ![](images/15893683817484.png)
    
    
    再往下,获取下一个/符号的位置,然后根据该位置索引对uri变量值进行工程名的切分提取:
    
    ![](images/15893683926125.png)
    
    
    接着,就是对刚刚切分得到的candidate变量进行和Tomcat一样的特殊字符处理过程,先调用removePathParameters()处理;和.,然后进行URL解码,再调用normalize()函数进行标准化处理,处理过后比较处理完的candidate变量值和之前获取的规范上下文路径是否一致,不一致的话就循环继续前面的操作直至一致为止:
    
    ![](images/15893683994194.png)
    
    
    最后,直接返回按pos索引切分的uri变量值:
    
    ![](images/15893684065258.png)
    
    
    links
    file_download