Webcoordinatorでは、セションIDをセションの途中で更新することが可能です。セションIDを更新するには、HttpSessionProfileクラスのrenewSessionIdメソッドを使用します。
package sample;
import com.fujitsu.uji.http.HttpSessionProfile;
import com.fujitsu.uji.SessionStateException;
public void someMethod(DispatchContext context, sample.MyDataBean dataBean) {
...
context.setResponseBean("body", dataBean);
HttpSessionProfile sp = (HttpSessionProfile)context.getSessionProfile();
// セションIDを更新します。
try {
sp.renewSessionId(context);
} catch (SessionStateException e) {
// renewSessionIdメソッドで発生した例外
...
}
}ポイント
http通信からhttps通信に移行するときにセションIDを更新することでセションハイジャック等の脅威に対応することが可能です。
注意
セションIDを更新する場合の注意事項は以下のとおりです。
ログ機能で出力されるコンテキストIDは、セションIDの更新機能を使用した場合でも変更されません。このため、同一のコンテキストIDを持つログを追跡することで、セションIDの更新が実行されたかどうかにかかわらず、一連のセションのログを追跡することが可能です。
セションIDの更新時は、セションが開始されている必要があります。
セションIDの更新時は、HttpSession関連のリスナーのメソッドが呼び出されます。
ビジネスクラスをセションスコープとした(initメソッドがtrueを返すようにプログラムした)場合であっても、セションIDの更新の前後でビジネスクラスのインスタンスは引継がれません。