Package io.netty.handler.codec.http
Class QueryStringDecoder
- java.lang.Object
-
- io.netty.handler.codec.http.QueryStringDecoder
-
public class QueryStringDecoder extends java.lang.Object
Splits an HTTP query string into a path string and key-value parameter pairs. This decoder is for one time use only. Create a new instance for each URI:QueryStringDecoder
decoder = newQueryStringDecoder
("/hello?recipient=world&x=1;y=2"); assert decoder.path().equals("/hello"); assert decoder.parameters().get("recipient").get(0).equals("world"); assert decoder.parameters().get("x").get(0).equals("1"); assert decoder.parameters().get("y").get(0).equals("2");QueryStringDecoder
decoder = newQueryStringDecoder
("recipient=world&x=1;y=2", false); ...HashDOS vulnerability fix
As a workaround to the HashDOS vulnerability, the decoder limits the maximum number of decoded key-value parameter pairs, up to 1024 by default, and you can configure it when you construct the decoder by passing an additional integer parameter.- See Also:
QueryStringEncoder
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
QueryStringDecoder.Builder
-
Field Summary
Fields Modifier and Type Field Description private java.nio.charset.Charset
charset
private static int
DEFAULT_MAX_PARAMS
private boolean
htmlQueryDecoding
private int
maxParams
private java.util.Map<java.lang.String,java.util.List<java.lang.String>>
params
private java.lang.String
path
private int
pathEndIdx
private boolean
semicolonIsNormalChar
private java.lang.String
uri
-
Constructor Summary
Constructors Modifier Constructor Description private
QueryStringDecoder(QueryStringDecoder.Builder builder, java.lang.String uri)
private
QueryStringDecoder(QueryStringDecoder.Builder builder, java.net.URI uri)
QueryStringDecoder(java.lang.String uri)
Creates a new decoder that decodes the specified URI.QueryStringDecoder(java.lang.String uri, boolean hasPath)
Creates a new decoder that decodes the specified URI encoded in the specified charset.QueryStringDecoder(java.lang.String uri, java.nio.charset.Charset charset)
Creates a new decoder that decodes the specified URI encoded in the specified charset.QueryStringDecoder(java.lang.String uri, java.nio.charset.Charset charset, boolean hasPath)
Creates a new decoder that decodes the specified URI encoded in the specified charset.QueryStringDecoder(java.lang.String uri, java.nio.charset.Charset charset, boolean hasPath, int maxParams)
Creates a new decoder that decodes the specified URI encoded in the specified charset.QueryStringDecoder(java.lang.String uri, java.nio.charset.Charset charset, boolean hasPath, int maxParams, boolean semicolonIsNormalChar)
Creates a new decoder that decodes the specified URI encoded in the specified charset.QueryStringDecoder(java.net.URI uri)
Creates a new decoder that decodes the specified URI.QueryStringDecoder(java.net.URI uri, java.nio.charset.Charset charset)
Creates a new decoder that decodes the specified URI encoded in the specified charset.QueryStringDecoder(java.net.URI uri, java.nio.charset.Charset charset, int maxParams)
Creates a new decoder that decodes the specified URI encoded in the specified charset.QueryStringDecoder(java.net.URI uri, java.nio.charset.Charset charset, int maxParams, boolean semicolonIsNormalChar)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
addParam(java.lang.String s, int nameStart, int valueStart, int valueEnd, java.util.Map<java.lang.String,java.util.List<java.lang.String>> params, java.nio.charset.Charset charset)
static QueryStringDecoder.Builder
builder()
static java.lang.String
decodeComponent(java.lang.String s)
Decodes a bit of a URL encoded by a browser.private static java.lang.String
decodeComponent(java.lang.String s, int from, int toExcluded, java.nio.charset.Charset charset, boolean plusToSpace)
static java.lang.String
decodeComponent(java.lang.String s, java.nio.charset.Charset charset)
Decodes a bit of a URL encoded by a browser.private java.util.Map<java.lang.String,java.util.List<java.lang.String>>
decodeParams(java.lang.String s, int from, java.nio.charset.Charset charset, int paramsLimit)
private static int
findPathEndIndex(java.lang.String uri)
java.util.Map<java.lang.String,java.util.List<java.lang.String>>
parameters()
Returns the decoded key-value parameter pairs of the URI.java.lang.String
path()
Returns the decoded path string of the URI.private int
pathEndIdx()
java.lang.String
rawPath()
Returns the raw path string of the URI.java.lang.String
rawQuery()
Returns raw query string of the URI.java.lang.String
toString()
java.lang.String
uri()
Returns the uri used to initialize thisQueryStringDecoder
.
-
-
-
Field Detail
-
DEFAULT_MAX_PARAMS
private static final int DEFAULT_MAX_PARAMS
- See Also:
- Constant Field Values
-
charset
private final java.nio.charset.Charset charset
-
uri
private final java.lang.String uri
-
maxParams
private final int maxParams
-
semicolonIsNormalChar
private final boolean semicolonIsNormalChar
-
htmlQueryDecoding
private final boolean htmlQueryDecoding
-
pathEndIdx
private int pathEndIdx
-
path
private java.lang.String path
-
params
private java.util.Map<java.lang.String,java.util.List<java.lang.String>> params
-
-
Constructor Detail
-
QueryStringDecoder
public QueryStringDecoder(java.lang.String uri)
Creates a new decoder that decodes the specified URI. The decoder will assume that the query string is encoded in UTF-8.
-
QueryStringDecoder
public QueryStringDecoder(java.lang.String uri, boolean hasPath)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
QueryStringDecoder
public QueryStringDecoder(java.lang.String uri, java.nio.charset.Charset charset)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
QueryStringDecoder
public QueryStringDecoder(java.lang.String uri, java.nio.charset.Charset charset, boolean hasPath)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
QueryStringDecoder
public QueryStringDecoder(java.lang.String uri, java.nio.charset.Charset charset, boolean hasPath, int maxParams)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
QueryStringDecoder
public QueryStringDecoder(java.lang.String uri, java.nio.charset.Charset charset, boolean hasPath, int maxParams, boolean semicolonIsNormalChar)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
QueryStringDecoder
public QueryStringDecoder(java.net.URI uri)
Creates a new decoder that decodes the specified URI. The decoder will assume that the query string is encoded in UTF-8.
-
QueryStringDecoder
public QueryStringDecoder(java.net.URI uri, java.nio.charset.Charset charset)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
QueryStringDecoder
public QueryStringDecoder(java.net.URI uri, java.nio.charset.Charset charset, int maxParams)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
QueryStringDecoder
public QueryStringDecoder(java.net.URI uri, java.nio.charset.Charset charset, int maxParams, boolean semicolonIsNormalChar)
Creates a new decoder that decodes the specified URI encoded in the specified charset.
-
QueryStringDecoder
private QueryStringDecoder(QueryStringDecoder.Builder builder, java.lang.String uri)
-
QueryStringDecoder
private QueryStringDecoder(QueryStringDecoder.Builder builder, java.net.URI uri)
-
-
Method Detail
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
uri
public java.lang.String uri()
Returns the uri used to initialize thisQueryStringDecoder
.
-
path
public java.lang.String path()
Returns the decoded path string of the URI.
-
parameters
public java.util.Map<java.lang.String,java.util.List<java.lang.String>> parameters()
Returns the decoded key-value parameter pairs of the URI.
-
rawPath
public java.lang.String rawPath()
Returns the raw path string of the URI.
-
rawQuery
public java.lang.String rawQuery()
Returns raw query string of the URI.
-
pathEndIdx
private int pathEndIdx()
-
decodeParams
private java.util.Map<java.lang.String,java.util.List<java.lang.String>> decodeParams(java.lang.String s, int from, java.nio.charset.Charset charset, int paramsLimit)
-
addParam
private boolean addParam(java.lang.String s, int nameStart, int valueStart, int valueEnd, java.util.Map<java.lang.String,java.util.List<java.lang.String>> params, java.nio.charset.Charset charset)
-
decodeComponent
public static java.lang.String decodeComponent(java.lang.String s)
Decodes a bit of a URL encoded by a browser.This is equivalent to calling
decodeComponent(String, Charset)
with the UTF-8 charset (recommended to comply with RFC 3986, Section 2).- Parameters:
s
- The string to decode (can be empty).- Returns:
- The decoded string, or
s
if there's nothing to decode. If the string to decode isnull
, returns an empty string. - Throws:
java.lang.IllegalArgumentException
- if the string contains a malformed escape sequence.
-
decodeComponent
public static java.lang.String decodeComponent(java.lang.String s, java.nio.charset.Charset charset)
Decodes a bit of a URL encoded by a browser.The string is expected to be encoded as per RFC 3986, Section 2. This is the encoding used by JavaScript functions
encodeURI
andencodeURIComponent
, but notescape
. For example in this encoding, é (in UnicodeU+00E9
or in UTF-80xC3 0xA9
) is encoded as%C3%A9
or%c3%a9
.This is essentially equivalent to calling
URLDecoder.decode(String, String)
except that it's over 2x faster and generates less garbage for the GC. Actually this function doesn't allocate any memory if there's nothing to decode, the argument itself is returned.- Parameters:
s
- The string to decode (can be empty).charset
- The charset to use to decode the string (should really beCharsetUtil.UTF_8
.- Returns:
- The decoded string, or
s
if there's nothing to decode. If the string to decode isnull
, returns an empty string. - Throws:
java.lang.IllegalArgumentException
- if the string contains a malformed escape sequence.
-
decodeComponent
private static java.lang.String decodeComponent(java.lang.String s, int from, int toExcluded, java.nio.charset.Charset charset, boolean plusToSpace)
-
findPathEndIndex
private static int findPathEndIndex(java.lang.String uri)
-
builder
public static QueryStringDecoder.Builder builder()
-
-