public class LazySessionInvalidationFilter
extends java.lang.Object
implements javax.servlet.Filter
HttpSession.invalidate()の呼び出しを遅延させるFilter実装クラス。
HttpRequestTestSupportHandlerでは、
テストクラスとJetty上で実行されるテスト対象間でのExecutionContextのコピーを行っている。
テスト実行中にセッションがinvalidateされた場合、Jetty 9ではExecutionContextの
書き戻し時にIllegalStateExceptionがスローされてしまう。
これを回避するためには、HttpSession.invalidate()が実行されるタイミングを遅らせる必要がある。
サーブレットフィルタ(本クラス)を差し込んで、ここでHttpServletRequestをラップする。
ラップしたHttpServletRequestは、セッションを要求されると、やはりラップしたHttpSessionを返却する。
このラップしたHttpSessionではHttpSession.invalidate()が呼び出されても、実際にはinvalidateをせず、
invalidateが要求されたことを記録しておく。
後続のすべての処理が終わった後、invalidateが要求された場合、実際にinvalidateを実行する。| Constructor and Description |
|---|
LazySessionInvalidationFilter() |
| Modifier and Type | Method and Description |
|---|---|
void |
destroy() |
void |
doFilter(javax.servlet.ServletRequest request,
javax.servlet.ServletResponse response,
javax.servlet.FilterChain chain)
HttpSessionのラップを行う。
後続処理終了後に遅延してHttpSession.invalidate()を行う。 |
void |
init(javax.servlet.FilterConfig filterConfig) |
public void init(javax.servlet.FilterConfig filterConfig)
throws javax.servlet.ServletException
init in interface javax.servlet.Filterjavax.servlet.ServletExceptionpublic void doFilter(javax.servlet.ServletRequest request,
javax.servlet.ServletResponse response,
javax.servlet.FilterChain chain)
throws java.io.IOException,
javax.servlet.ServletException
HttpSessionのラップを行う。
後続処理終了後に遅延してHttpSession.invalidate()を行う。doFilter in interface javax.servlet.Filterjava.io.IOExceptionjavax.servlet.ServletExceptionpublic void destroy()
destroy in interface javax.servlet.Filter