Class HttpMethodOverrideFilter

  • All Implemented Interfaces:
    javax.ws.rs.container.ContainerRequestFilter

    @PreMatching
    @Priority(3050)
    public final class HttpMethodOverrideFilter
    extends java.lang.Object
    implements javax.ws.rs.container.ContainerRequestFilter
    A pre-matching filter to support HTTP method replacing of a POST request to a request utilizing another HTTP method for the case where proxies or HTTP servers would otherwise block that HTTP method.

    This filter may be used to replace a POST request with a PUT, DELETE or GET request.

    Replacement will occur if the request method is POST and there exists either a request header "X-HTTP-Method-Override", or a query parameter "_method" with a non-empty value. That value will be the HTTP method that replaces the POST method. In addition to that, when replacing the POST method with GET, the filter will convert the form parameters to query parameters. If the filter is configured to look for both the X-HTTP-Method-Override header as well as the _method query parameter (the default setting), both are present in the request and they differ, the filter returns Response.Status.BAD_REQUEST response.

    The filter behavior can be configured using ServerProperties.HTTP_METHOD_OVERRIDE property.

    • Field Detail

      • config

        final int config
        Configuration flags.

        Package-private for testing purposes.

    • Constructor Detail

      • HttpMethodOverrideFilter

        public HttpMethodOverrideFilter​(@Context
                                        javax.ws.rs.core.Configuration rc)
        Create a filter that reads the configuration (ServerProperties.HTTP_METHOD_OVERRIDE) from the provided ResourceConfig instance.

        This constructor will be called by the Jersey runtime when the filter class is returned from Application.getClasses(). The ResourceConfig instance will get auto-injected.

        Parameters:
        rc - ResourceConfig instance that holds the configuration for the filter.
    • Method Detail

      • getParamValue

        private java.lang.String getParamValue​(HttpMethodOverrideFilter.Source source,
                                               javax.ws.rs.core.MultivaluedMap<java.lang.String,​java.lang.String> paramsMap,
                                               java.lang.String paramName)
        Returns parameter value in a normalized form (uppercase, trimmed and null if empty string) considering the config flags.
        Parameters:
        source - Config flag to look for (if set in the config, this method returns the param value, if not set, this method returns null).
        paramsMap - Map to retrieve the parameter from.
        paramName - Name of the parameter to retrieve.
        Returns:
        Normalized parameter value. Never returns an empty string - converts it to null.
      • filter

        public void filter​(javax.ws.rs.container.ContainerRequestContext request)
        Specified by:
        filter in interface javax.ws.rs.container.ContainerRequestFilter