keycloak
静的公開メンバ関数 | 静的限定公開メンバ関数 | 静的関数 | 静的非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.common.util.Encode クラス
org.keycloak.common.util.Encode 連携図
Collaboration graph

静的公開メンバ関数

static String encodeQueryString (String value)
 
static String encodePath (String value)
 
static String encodePathSegment (String value)
 
static String encodeFragment (String value)
 
static String encodeMatrixParam (String value)
 
static String encodeQueryParam (String value)
 
static String decodePath (String path)
 
static String encodeNonCodes (String string)
 
static boolean savePathParams (String segment, StringBuilder newSegment, List< String > params)
 
static String encodeValue (String segment, String[] encoding)
 
static String encodePathAsIs (String segment)
 
static String encodePathSaveEncodings (String segment)
 
static String encodePathSegmentAsIs (String segment)
 
static String encodePathSegmentSaveEncodings (String segment)
 
static String encodeQueryParamAsIs (String nameOrValue)
 
static String encodeQueryParamSaveEncodings (String segment)
 
static String encodeFragmentAsIs (String nameOrValue)
 
static String pathParamReplacement (String segment, List< String > params)
 
static MultivaluedHashMap< String, String > decode (MultivaluedHashMap< String, String > map)
 
static MultivaluedHashMap< String, String > decode (MultivaluedHashMap< String, String > map, String charset)
 
static MultivaluedHashMap< String, String > encode (MultivaluedHashMap< String, String > map)
 
static String decode (String string)
 

静的限定公開メンバ関数

static String encodeFromArray (String segment, String[] encodingMap, boolean encodePercent)
 

静的関数

 [static initializer]
 

静的非公開メンバ関数

static String decodeBytes (String enc, CharsetDecoder decoder)
 
static String encode (int zhar, String[] encodingMap)
 

静的非公開変数類

static final String UTF_8 = StandardCharsets.UTF_8.name()
 
static final Pattern PARAM_REPLACEMENT = Pattern.compile("_resteasy_uri_parameter")
 
static final String [] pathEncoding = new String[128]
 
static final String [] pathSegmentEncoding = new String[128]
 
static final String [] matrixParameterEncoding = new String[128]
 
static final String [] queryNameValueEncoding = new String[128]
 
static final String [] queryStringEncoding = new String[128]
 
static final Pattern nonCodes = Pattern.compile("%([^a-fA-F0-9]|[a-fA-F0-9]$|$|[a-fA-F0-9][^a-fA-F0-9])")
 
static final Pattern encodedChars = Pattern.compile("%([a-fA-F0-9][a-fA-F0-9])")
 
static final Pattern encodedCharsMulti = Pattern.compile("((%[a-fA-F0-9][a-fA-F0-9])+)")
 

詳解

著者
Bill Burke
バージョン
Revision
1

関数詳解

◆ [static initializer]()

org.keycloak.common.util.Encode.[static initializer] ( )
inlinestaticpackage

◆ decode() [1/3]

static MultivaluedHashMap<String, String> org.keycloak.common.util.Encode.decode ( MultivaluedHashMap< String, String >  map)
inlinestatic

decode an encoded map

引数
map
戻り値
488  {
489  MultivaluedHashMap<String, String> decoded = new MultivaluedHashMap<String, String>();
490  for (Map.Entry<String, List<String>> entry : map.entrySet())
491  {
492  List<String> values = entry.getValue();
493  for (String value : values)
494  {
495  try
496  {
497  decoded.add(URLDecoder.decode(entry.getKey(), UTF_8), URLDecoder.decode(value, UTF_8));
498  }
499  catch (UnsupportedEncodingException e)
500  {
501  throw new RuntimeException(e);
502  }
503  }
504  }
505  return decoded;
506  }
static final String UTF_8
Definition: Encode.java:40

◆ decode() [2/3]

static MultivaluedHashMap<String, String> org.keycloak.common.util.Encode.decode ( MultivaluedHashMap< String, String >  map,
String  charset 
)
inlinestatic

decode an encoded map

引数
map
charset
戻り値
516  {
517  if (charset == null)
518  {
519  charset = UTF_8;
520  }
521  MultivaluedHashMap<String, String> decoded = new MultivaluedHashMap<String, String>();
522  for (Map.Entry<String, List<String>> entry : map.entrySet())
523  {
524  List<String> values = entry.getValue();
525  for (String value : values)
526  {
527  try
528  {
529  decoded.add(URLDecoder.decode(entry.getKey(), charset), URLDecoder.decode(value, charset));
530  }
531  catch (UnsupportedEncodingException e)
532  {
533  throw new RuntimeException(e);
534  }
535  }
536  }
537  return decoded;
538  }
static final String UTF_8
Definition: Encode.java:40

◆ decode() [3/3]

static String org.keycloak.common.util.Encode.decode ( String  string)
inlinestatic
562  {
563  try
564  {
565  return URLDecoder.decode(string, UTF_8);
566  }
567  catch (UnsupportedEncodingException e)
568  {
569  throw new RuntimeException(e);
570  }
571  }
static final String UTF_8
Definition: Encode.java:40

◆ decodeBytes()

static String org.keycloak.common.util.Encode.decodeBytes ( String  enc,
CharsetDecoder  decoder 
)
inlinestaticprivate
235  {
236  Matcher matcher = encodedChars.matcher(enc);
237  ByteBuffer bytes = ByteBuffer.allocate(enc.length() / 3);
238  while (matcher.find())
239  {
240  int b = Integer.parseInt(matcher.group(1), 16);
241  bytes.put((byte) b);
242  }
243  bytes.flip();
244  try
245  {
246  return decoder.decode(bytes).toString();
247  }
248  catch (CharacterCodingException e)
249  {
250  throw new RuntimeException(e);
251  }
252  }
static final Pattern encodedChars
Definition: Encode.java:213

◆ decodePath()

static String org.keycloak.common.util.Encode.decodePath ( String  path)
inlinestatic
217  {
218  Matcher matcher = encodedCharsMulti.matcher(path);
219  int start=0;
220  StringBuilder builder = new StringBuilder();
221  CharsetDecoder decoder = Charset.forName(UTF_8).newDecoder();
222  while (matcher.find())
223  {
224  builder.append(path, start, matcher.start());
225  decoder.reset();
226  String decoded = decodeBytes(matcher.group(1), decoder);
227  builder.append(decoded);
228  start = matcher.end();
229  }
230  builder.append(path, start, path.length());
231  return builder.toString();
232  }
static String decodeBytes(String enc, CharsetDecoder decoder)
Definition: Encode.java:234
static final String UTF_8
Definition: Encode.java:40
static final Pattern encodedCharsMulti
Definition: Encode.java:214

◆ encode() [1/2]

static String org.keycloak.common.util.Encode.encode ( int  zhar,
String []  encodingMap 
)
inlinestaticprivate
引数
zharinteger representation of character
encodingMapencoding map
戻り値
URL encoded character
443  {
444  String encoded;
445  if (zhar < encodingMap.length)
446  {
447  encoded = encodingMap[zhar];
448  }
449  else
450  {
451  try
452  {
453  encoded = URLEncoder.encode(Character.toString((char) zhar), UTF_8);
454  }
455  catch (UnsupportedEncodingException e)
456  {
457  throw new RuntimeException(e);
458  }
459  }
460  return encoded;
461  }
static final String UTF_8
Definition: Encode.java:40

◆ encode() [2/2]

static MultivaluedHashMap<String, String> org.keycloak.common.util.Encode.encode ( MultivaluedHashMap< String, String >  map)
inlinestatic
541  {
542  MultivaluedHashMap<String, String> decoded = new MultivaluedHashMap<String, String>();
543  for (Map.Entry<String, List<String>> entry : map.entrySet())
544  {
545  List<String> values = entry.getValue();
546  for (String value : values)
547  {
548  try
549  {
550  decoded.add(URLEncoder.encode(entry.getKey(), UTF_8), URLEncoder.encode(value, UTF_8));
551  }
552  catch (UnsupportedEncodingException e)
553  {
554  throw new RuntimeException(e);
555  }
556  }
557  }
558  return decoded;
559  }
static final String UTF_8
Definition: Encode.java:40

◆ encodeFragment()

static String org.keycloak.common.util.Encode.encodeFragment ( String  value)
inlinestatic

Keep encoded values "%..." and template parameters intact.

191  {
192  return encodeValue(value, queryStringEncoding);
193  }
static final String [] queryStringEncoding
Definition: Encode.java:48
static String encodeValue(String segment, String[] encoding)
Definition: Encode.java:311

◆ encodeFragmentAsIs()

static String org.keycloak.common.util.Encode.encodeFragmentAsIs ( String  nameOrValue)
inlinestatic
409  {
410  return encodeFromArray(nameOrValue, queryNameValueEncoding, true);
411  }
static final String [] queryNameValueEncoding
Definition: Encode.java:47
static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent)
Definition: Encode.java:413

◆ encodeFromArray()

static String org.keycloak.common.util.Encode.encodeFromArray ( String  segment,
String []  encodingMap,
boolean  encodePercent 
)
inlinestaticprotected
414  {
415  StringBuilder result = new StringBuilder();
416  for (int i = 0; i < segment.length(); i++)
417  {
418  char currentChar = segment.charAt(i);
419  if (!encodePercent && currentChar == '%')
420  {
421  result.append(currentChar);
422  continue;
423  }
424  String encoding = encode(currentChar, encodingMap);
425  if (encoding == null)
426  {
427  result.append(currentChar);
428  }
429  else
430  {
431  result.append(encoding);
432  }
433  }
434  return result.toString();
435  }
static String encode(int zhar, String[] encodingMap)
Definition: Encode.java:442

◆ encodeMatrixParam()

static String org.keycloak.common.util.Encode.encodeMatrixParam ( String  value)
inlinestatic

Keep encoded values "%..." and template parameters intact.

199  {
200  return encodeValue(value, matrixParameterEncoding);
201  }
static final String [] matrixParameterEncoding
Definition: Encode.java:46
static String encodeValue(String segment, String[] encoding)
Definition: Encode.java:311

◆ encodeNonCodes()

static String org.keycloak.common.util.Encode.encodeNonCodes ( String  string)
inlinestatic

Encode '' if it is not an encoding sequence

引数
string
戻り値
261  {
262  Matcher matcher = nonCodes.matcher(string);
263  StringBuilder builder = new StringBuilder();
264 
265 
266  // FYI: we do not use the no-arg matcher.find()
267  // coupled with matcher.appendReplacement()
268  // because the matched text may contain
269  // a second % and we must make sure we
270  // encode it (if necessary).
271  int idx = 0;
272  while (matcher.find(idx))
273  {
274  int start = matcher.start();
275  builder.append(string.substring(idx, start));
276  builder.append("%25");
277  idx = start + 1;
278  }
279  builder.append(string.substring(idx));
280  return builder.toString();
281  }
static final Pattern nonCodes
Definition: Encode.java:212

◆ encodePath()

static String org.keycloak.common.util.Encode.encodePath ( String  value)
inlinestatic

Keep encoded values "%...", matrix parameters, template parameters, and '/' characters intact.

175  {
176  return encodeValue(value, pathEncoding);
177  }
static final String [] pathEncoding
Definition: Encode.java:44
static String encodeValue(String segment, String[] encoding)
Definition: Encode.java:311

◆ encodePathAsIs()

static String org.keycloak.common.util.Encode.encodePathAsIs ( String  segment)
inlinestatic

Encode via RFC 3986. PCHAR is allowed allong with '/'

unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" pchar = unreserved / pct-encoded / sub-delims / ":" / "@"

340  {
341  return encodeFromArray(segment, pathEncoding, true);
342  }
static final String [] pathEncoding
Definition: Encode.java:44
static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent)
Definition: Encode.java:413

◆ encodePathSaveEncodings()

static String org.keycloak.common.util.Encode.encodePathSaveEncodings ( String  segment)
inlinestatic

Keep any valid encodings from string i.e. keep "%2D" but don't keep "%p"

引数
segment
戻り値
351  {
352  String result = encodeFromArray(segment, pathEncoding, false);
353  result = encodeNonCodes(result);
354  return result;
355  }
static String encodeNonCodes(String string)
Definition: Encode.java:260
static final String [] pathEncoding
Definition: Encode.java:44
static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent)
Definition: Encode.java:413

◆ encodePathSegment()

static String org.keycloak.common.util.Encode.encodePathSegment ( String  value)
inlinestatic

Keep encoded values "%...", matrix parameters and template parameters intact.

183  {
184  return encodeValue(value, pathSegmentEncoding);
185  }
static final String [] pathSegmentEncoding
Definition: Encode.java:45
static String encodeValue(String segment, String[] encoding)
Definition: Encode.java:311

◆ encodePathSegmentAsIs()

static String org.keycloak.common.util.Encode.encodePathSegmentAsIs ( String  segment)
inlinestatic

Encode via RFC 3986. PCHAR is allowed allong with '/'

unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" pchar = unreserved / pct-encoded / sub-delims / ":" / "@"

366  {
367  return encodeFromArray(segment, pathSegmentEncoding, true);
368  }
static final String [] pathSegmentEncoding
Definition: Encode.java:45
static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent)
Definition: Encode.java:413

◆ encodePathSegmentSaveEncodings()

static String org.keycloak.common.util.Encode.encodePathSegmentSaveEncodings ( String  segment)
inlinestatic

Keep any valid encodings from string i.e. keep "%2D" but don't keep "%p"

引数
segment
戻り値
377  {
378  String result = encodeFromArray(segment, pathSegmentEncoding, false);
379  result = encodeNonCodes(result);
380  return result;
381  }
static String encodeNonCodes(String string)
Definition: Encode.java:260
static final String [] pathSegmentEncoding
Definition: Encode.java:45
static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent)
Definition: Encode.java:413

◆ encodeQueryParam()

static String org.keycloak.common.util.Encode.encodeQueryParam ( String  value)
inlinestatic

Keep encoded values "%..." and template parameters intact.

207  {
208  return encodeValue(value, queryNameValueEncoding);
209  }
static final String [] queryNameValueEncoding
Definition: Encode.java:47
static String encodeValue(String segment, String[] encoding)
Definition: Encode.java:311

◆ encodeQueryParamAsIs()

static String org.keycloak.common.util.Encode.encodeQueryParamAsIs ( String  nameOrValue)
inlinestatic

Encodes everything of a query parameter name or value.

引数
nameOrValue
戻り値
391  {
392  return encodeFromArray(nameOrValue, queryNameValueEncoding, true);
393  }
static final String [] queryNameValueEncoding
Definition: Encode.java:47
static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent)
Definition: Encode.java:413

◆ encodeQueryParamSaveEncodings()

static String org.keycloak.common.util.Encode.encodeQueryParamSaveEncodings ( String  segment)
inlinestatic

Keep any valid encodings from string i.e. keep "%2D" but don't keep "%p"

引数
segment
戻り値
402  {
403  String result = encodeFromArray(segment, queryNameValueEncoding, false);
404  result = encodeNonCodes(result);
405  return result;
406  }
static final String [] queryNameValueEncoding
Definition: Encode.java:47
static String encodeNonCodes(String string)
Definition: Encode.java:260
static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent)
Definition: Encode.java:413

◆ encodeQueryString()

static String org.keycloak.common.util.Encode.encodeQueryString ( String  value)
inlinestatic

Keep encoded values "%..." and template parameters intact.

167  {
168  return encodeValue(value, queryStringEncoding);
169  }
static final String [] queryStringEncoding
Definition: Encode.java:48
static String encodeValue(String segment, String[] encoding)
Definition: Encode.java:311

◆ encodeValue()

static String org.keycloak.common.util.Encode.encodeValue ( String  segment,
String []  encoding 
)
inlinestatic

Keep encoded values "%..." and template parameters intact i.e. "{x}"

引数
segment
encoding
戻り値
312  {
313  ArrayList<String> params = new ArrayList<String>();
314  boolean foundParam = false;
315  StringBuilder newSegment = new StringBuilder();
316  if (savePathParams(segment, newSegment, params))
317  {
318  foundParam = true;
319  segment = newSegment.toString();
320  }
321  String result = encodeFromArray(segment, encoding, false);
322  result = encodeNonCodes(result);
323  segment = result;
324  if (foundParam)
325  {
326  segment = pathParamReplacement(segment, params);
327  }
328  return segment;
329  }
static String encodeNonCodes(String string)
Definition: Encode.java:260
static String pathParamReplacement(String segment, List< String > params)
Definition: Encode.java:463
static boolean savePathParams(String segment, StringBuilder newSegment, List< String > params)
Definition: Encode.java:283
static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent)
Definition: Encode.java:413

◆ pathParamReplacement()

static String org.keycloak.common.util.Encode.pathParamReplacement ( String  segment,
List< String >  params 
)
inlinestatic
464  {
465  StringBuilder newSegment = new StringBuilder();
466  Matcher matcher = PARAM_REPLACEMENT.matcher(segment);
467  int i = 0;
468  int start = 0;
469  while (matcher.find())
470  {
471  newSegment.append(segment, start, matcher.start());
472  String replacement = params.get(i++);
473  newSegment.append(replacement);
474  start = matcher.end();
475  }
476  newSegment.append(segment, start, segment.length());
477  segment = newSegment.toString();
478  return segment;
479  }
static final Pattern PARAM_REPLACEMENT
Definition: Encode.java:42

◆ savePathParams()

static boolean org.keycloak.common.util.Encode.savePathParams ( String  segment,
StringBuilder  newSegment,
List< String >  params 
)
inlinestatic
284  {
285  boolean foundParam = false;
286  // Regular expressions can have '{' and '}' characters. Replace them to do match
287  segment = PathHelper.replaceEnclosedCurlyBraces(segment);
288  Matcher matcher = PathHelper.URI_TEMPLATE_PATTERN.matcher(segment);
289  int start = 0;
290  while (matcher.find())
291  {
292  newSegment.append(segment, start, matcher.start());
293  foundParam = true;
294  String group = matcher.group();
295  // Regular expressions can have '{' and '}' characters. Recover earlier replacement
296  params.add(PathHelper.recoverEnclosedCurlyBraces(group));
297  newSegment.append("_resteasy_uri_parameter");
298  start = matcher.end();
299  }
300  newSegment.append(segment, start, segment.length());
301  return foundParam;
302  }

メンバ詳解

◆ encodedChars

final Pattern org.keycloak.common.util.Encode.encodedChars = Pattern.compile("%([a-fA-F0-9][a-fA-F0-9])")
staticprivate

◆ encodedCharsMulti

final Pattern org.keycloak.common.util.Encode.encodedCharsMulti = Pattern.compile("((%[a-fA-F0-9][a-fA-F0-9])+)")
staticprivate

◆ matrixParameterEncoding

final String [] org.keycloak.common.util.Encode.matrixParameterEncoding = new String[128]
staticprivate

◆ nonCodes

final Pattern org.keycloak.common.util.Encode.nonCodes = Pattern.compile("%([^a-fA-F0-9]|[a-fA-F0-9]$|$|[a-fA-F0-9][^a-fA-F0-9])")
staticprivate

◆ PARAM_REPLACEMENT

final Pattern org.keycloak.common.util.Encode.PARAM_REPLACEMENT = Pattern.compile("_resteasy_uri_parameter")
staticprivate

◆ pathEncoding

final String [] org.keycloak.common.util.Encode.pathEncoding = new String[128]
staticprivate

◆ pathSegmentEncoding

final String [] org.keycloak.common.util.Encode.pathSegmentEncoding = new String[128]
staticprivate

◆ queryNameValueEncoding

final String [] org.keycloak.common.util.Encode.queryNameValueEncoding = new String[128]
staticprivate

◆ queryStringEncoding

final String [] org.keycloak.common.util.Encode.queryStringEncoding = new String[128]
staticprivate

◆ UTF_8

final String org.keycloak.common.util.Encode.UTF_8 = StandardCharsets.UTF_8.name()
staticprivate

このクラス詳解は次のファイルから抽出されました: