カスタム HTTP ヘッダーが、認証のためにサーブレット アプリケーションに渡されています。ヘッダー値には、アクセントやその他の非 ASCII 文字を含めることができる必要があるため、特定のエンコーディング (理想的には UTF-8) である必要があります。
認証環境を制御する開発者から、次の Java コードが提供されました。
String firstName = request.getHeader("my-custom-header");
String decodedFirstName = new String(firstName.getBytes(),"UTF-8");
しかし、このコードは私には正しく見えません: ヘッダー値のエンコーディングを指定する適切な方法があるように思えたときに、ヘッダー値のエンコーディングを前提としています (MIME からだと思います)。
ここに私の質問があります: UTF-8 エンコーディングをサポートする必要があるカスタム ヘッダー値を処理する正しい方法 (tm) は何ですか:
- ワイヤー上 (ヘッダーがワイヤー上でどのように見えるか)
- デコードの観点から (Java Servlet API を使用してデコードする方法、および request.getHeader() が既に適切にデコードを行っていると仮定できます)
サービスを変更できない場合にヘッダーを UTF-8 として扱う環境に依存しないコード サンプルを次に示します。
String valueAsISO = request.getHeader("my-custom-header");
String valueAsUTF8 = new String(firstName.getBytes("ISO8859-1"),"UTF-8");