Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-2836

Incorrect work of WicketFilter with UTF-8 urls through proxy_ajp_module and ajp connector

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.4.7
    • 1.5.0
    • wicket
    • None
    • Apache 2.2 http server with configured proxy_ajp_module, Tomcat 5.5, wicket 1.4.7

    Description

      Preconditions:

      Working application on tomacat 5.5 with non SSL HTTP/1.1 connector , that has utf-8 encoded URLs
      Connector configuration :
      <Connector port="8080" maxHttpHeaderSize="8192" URIEncoding="UTF-8" maxThreads="400" maxKeepAliveRequests="100" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443"
      acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" compression="on"/>

      Configured virtual host on apache http server:

      Listen 81
      NameVirtualHost *:81
      <VirtualHost *:81>
      ServerName jewelry.npa.com
      <Proxy *>
      AddDefaultCharset utf-8
      Order deny,allow
      Allow from all
      </Proxy>
      ProxyPass / ajp://jewelry.npa.com:8009/
      ProxyPassReverse / ajp://jewelry.npa.com:8009/
      AddDefaultCharset utf-8
      </VirtualHost>

      Configured ajp connector on tomcat 5.5
      <Connector port="8009" useBodyEncodingForURI="false" maxHttpHeaderSize="8192" URIEncoding="UTF-8" maxThreads="400"
      maxKeepAliveRequests="100" minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
      redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"
      compression="on" protocol="AJP/1.3" />

      Problem:

      All requests, that has utf-8 url and NOT served by wicket filter works ok.

      All requests, that has utf-8 url and served by wicket filter works incorrect, because of encoding issue with ajp connector and incorect work of WicketFilter#getRelativePath(HttpServletRequest request) lines 590 - 594.

      Explanation:

      ajp module change the percent encoding (http://en.wikipedia.org/wiki/Percent-encoding)

      Proposed fix:

      Need to use request.getServletPath() instead of request.getRequestURI() to get the relativePath, because of
      HttpServletRequest sepecification http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/http/HttpServletRequest.html
      Please look at difference getServletPath returns DECODED value, but getRequestURI and getRequestURL - not.

      Attachments

        1. wicket-2836.patch
          7 kB
          Igor Azarny

        Activity

          People

            mgrigorov Martin Tzvetanov Grigorov
            azarny Igor Azarny
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 24h
                24h
                Remaining:
                Remaining Estimate - 24h
                24h
                Logged:
                Time Spent - Not Specified
                Not Specified