以下について説明します。
セッション使用時の注意
セッションIDの一意性の範囲、桁数、使用文字、フォーマットは、本製品のバージョンアップや修正適用に伴い変更される可能性があります。
そのため、これらに依存したアプリケーションや、Webアプリケーション範囲以外へのセッションIDの利用はおすすめいたしません。
例えば、セッションIDをデータベースに登録した場合は、本製品のバージョンアップによってカラムの桁数不足が発生する可能性があります。
また、リクエストやユーザーの正当性や一意性につきましては、セッションIDのみに依存しない方法により適切にチェック/保証するようにしてください。
Cookieによるセッション管理は、Webコンテナによって自動的に行われます。
セッションCookieの追加などの操作は、アプリケーションで行わないようにしてください。
セッション継続やセキュリティ上の問題が発生する場合があります。
WebサーバがSSL環境で動作している場合には、セッションCookieに自動的にSecure属性を付加します。
SSLアクセラレータを使用しておりWebサーバが非SSL(HTTP)で動作している場合には、Secure属性は自動的に付加しません。Secure属性を付加する方法については、「3.2.1.2 Interstage Web application deployment descriptor (glassfish-web.xml)」の「cookie-properties (親タグ:session-config)」を参照してください。
WebアプリケーションでセッションIDを含むURLを生成する場合、以下のいずれかのAPIを使用するようにしてください。これらのAPIを使用しない場合、Webサーバがセッションのあるサーバーインスタンスに対して正しくリクエストを振り分けない可能性があります。
javax.servlet.http.HttpServletResponse#encodeURL(String)
javax.servlet.http.HttpServletResponse#encodeRedirectURL(String)
文字コードについて
一般的に、Webブラウザは以下の順番で文字コードを識別します。
Content-Typeヘッダのcharsetに指定した文字コード
HTMLの場合は<meta>タグに指定した文字コード
指定した文字コードは、通常Webブラウザがコンテンツを表示する際の文字コード、また、Webブラウザがサーバにリクエストを送信する際の文字コードとして使用されます。
Servlet/JSPに対してはContent-Typeヘッダの設定、HTMLファイルに対しては<meta>タグの設定を行ってください。
詳細は、HTML/Servlet/JSPの仕様を参照してください。
Webブラウザからのリクエストを正しい文字コードで処理するための方法には、以下の2つがあります。
以下のServlet APIを使用して、文字コードを指定します。
javax.servlet.ServletRequest.setCharacterEncoding
詳細は、Servletの仕様を参照してください。
例
request.setCharacterEncoding("SJIS");
注意
このメソッドは、リクエストのパラメタを読み込む前、またはgetReaderメソッドを呼び出す前に実行されなければなりません。
glassfish-web.xmlの<parameter-encoding>タグで文字コードを指定します。
定義方法の詳細は、「3.2.1.2 Interstage Web application deployment descriptor (glassfish-web.xml)」を参照してください。
例
<parameter-encoding default-charset="SJIS"/>
注意
javax.servlet.ServletRequest.setCharacterEncodingが指定されている場合は、setCharacterEncodingで指定された値が優先されます。
JSPでは、以下の文字コードを正しく設定する必要があります。
JSPファイルの文字コード
ブラウザに返す文字コード
詳細は、JSPの仕様を参照してください。
Webアプリケーション内でクライアントに返すレスポンスの文字コードが統一されていない場合、文字化けが発生することがあります。そのため、文字コードを統一してWebアプリケーションを作成してください。
HTTPレスポンスヘッダには、印字可能なASCIIコード範囲の文字を指定するようにしてください。それ以外の文字は、半角空白に置き換えられてクライアントに返却されます。
WebアプリケーションでHTTPレスポンスヘッダにContent-Dispositionヘッダを設定することによりファイルのダウンロードが行われる場合、Content-Dispositionヘッダのfilename属性に日本語やISO-8859-1などの印字可能なASCIIコード範囲でない文字を指定すると、ダウンロードしたファイルのファイル名が文字化けすることがあります。
そのため、RFC6266に則りfilename*属性にURLエンコードしたファイル名を指定するようにしてください。このとき、java.net.URLEncoderのencodeメソッドを使用すると半角空白は+に変換されるため、encodeメソッドを実行して得られた文字列の「+」を「%20」に置換するようにしてください。
例
ファイル名「日本語ファイル名 (1).txt」をダウンロードするサーブレットのコード例
String fileName="日本語ファイル名 (1).txt"; String encodedFileName = URLEncoder.encode(fileName, "UTF-8"); encodedFileName = encodedFileName.replace("+", "%20"); response.setContentType("text/plain"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8\'\'" + encodedFileName);
Webコンテナ以外のサービスをWebアプリケーションで使用する場合、必要に応じて入出力データの文字コードを変換してください。
詳細は、使用するサービスのマニュアルを参照してください。
「12.3.2 Java EEアプリケーションで文字化けが発生する場合の対処」を参照してください。
Cookieについて
一部のWebブラウザでは、ポート番号に80(SSL通信の場合はポート番号443)を指定した場合と省略した場合とが別サーバであると判断され、Cookieヘッダが送信されない場合があります。
そのため、アプリケーションでCookieによる制御を行う場合は、Webブラウザからの呼び出し方がどちらかに統一されるようにHTML、アプリケーションを構築することをおすすめします。
Cross-Site-Scriptingの脆弱性の問題
「使用上の注意」の「Cross-Site Scripting問題について」を参照してください。
ErrorやExceptionについて
アプリケーションで発生したErrorやExceptionをWebブラウザに返却するアプリケーションは、内部の情報の漏洩につながるため、作成しないことを推奨します。
また、サーブレットやJSPで処理していない(catchしていない)ErrorやExceptionに対して、アプリケーションで適切にエラーハンドリングしていない場合、Webコンテナのデフォルトエラーページが表示されます。
エラーページについて
web.xmlに指定したエラーページ、またはデフォルトエラーページが表示された場合のステータスコードは通常、エラーページを表示する原因となったステータスコードが返されます(表示する原因が例外の場合、ステータスコードは500です)。
任意のステータスコード(例えば、200)を返したい場合、エラーページまたはFilterを使用してステータスコードを変更してください。
Webブラウザの種類や設定によっては意図したエラーページが表示されず、Webブラウザで用意されたエラーページが表示されることがあります。
例
Microsoft(R) Internet Explorer
「ツール」→「インターネット オプション」→「詳細設定」→「HTTP エラー メッセージを簡易表示する」が有効(デフォルト値)の場合。
JSPの入れ替えについて
JSPのオートリロード機能を使用している場合、JSPのコンパイルは、JSPまたはJSPから静的includeされているファイルのタイムスタンプが、前回JSPのコンパイルを行った時刻よりも未来の場合に実行されます。
したがって、開発中のJSPまたはJSPから静的includeされているファイルを修正前の状態に戻す場合は、ファイルのタイムスタンプをマシンの現在の時刻に更新してください。
ServletContext/ServletRequestの属性について
以下のプレフィックスで始まる属性は、予約されています。
値は、変更しないでください。
java.
javax.
sun.
com.sun.
com.fujitsu.interstage.javaee.
また、ServletContextAttributeListener/ServletRequestAttributeListenerが設定されている場合、Webコンテナが上記プレフィックスで始まる属性を追加、更新、削除するタイミングでリスナーのメソッドが呼び出されます。
FORM認証について
以下の条件を満たした場合、Webブラウザに「HTTP Status 405」が表示され、リクエストの処理に失敗します。そのため、<http-method>には、GETも指定してください。
WebアプリケーションでJava EE7セキュリティ機能を使用、かつ
FORM認証である場合、かつ
deployment descriptor(web.xml)で<http-method>にPOSTのみ指定している場合、かつ
1.のWebアプリケーションに対して、3.の設定が有効となるコンテンツに対してHTTP POSTリクエストを送信、かつ
FORM認証の画面から目的のコンテンツに遷移した場合
以下の条件を満たした場合、ボディを含むHTTP POSTリクエストを送信しても、Webアプリケーション内ではリクエストのボディを正しく取得することができません。HTTP POSTリクエストを送信するときには、FORM認証の画面が表示されない状態(認証が 完了した状態)になるようにアプリケーションを作成してください。
WebアプリケーションでJava EE7セキュリティ機能を使用、かつ
FORM認証である場合、かつ
ServletまたはJSPでリクエストのボディを取得、かつ
Webアプリケーションに対して、HTTP POSTリクエストを送信、かつ
FORM認証の画面から目的のコンテンツに遷移した場合