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.Filter
javax.servlet.ServletException
public 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.Filter
java.io.IOException
javax.servlet.ServletException
public void destroy()
destroy
in interface javax.servlet.Filter