Class LazySessionInvalidationFilter

java.lang.Object
nablarch.fw.web.httpserver.LazySessionInvalidationFilter
All Implemented Interfaces:
jakarta.servlet.Filter

public class LazySessionInvalidationFilter extends Object implements jakarta.servlet.Filter
HttpSession.invalidate()の呼び出しを遅延させるFilter実装クラス。 HttpRequestTestSupportHandlerでは、 テストクラスとJetty上で実行されるテスト対象間でのExecutionContextのコピーを行っている。 テスト実行中にセッションがinvalidateされた場合、Jetty 12ではExecutionContextの 書き戻し時にIllegalStateExceptionがスローされてしまう。 これを回避するためには、HttpSession.invalidate()が実行されるタイミングを遅らせる必要がある。 サーブレットフィルタ(本クラス)を差し込んで、ここでHttpServletRequestをラップする。 ラップしたHttpServletRequestは、セッションを要求されると、やはりラップしたHttpSessionを返却する。 このラップしたHttpSessionではHttpSession.invalidate()が呼び出されても、実際にはinvalidateをせず、 invalidateが要求されたことを記録しておく。 後続のすべての処理が終わった後、invalidateが要求された場合、実際にinvalidateを実行する。 Jetty 9 ではラップに標準APIの Proxy を用いていたが、 Jetty 12 では単純なラップクラスを使用している。 これは、 Jetty 12 が内部で instanceof を使ってServletRequestWrapper かどうか 判定している部分があり、 Proxy を用いているとその判定条件に入れないという理由があるためである。
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    void
    doFilter(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, jakarta.servlet.FilterChain chain)
    HttpSessionのラップを行う。 後続処理終了後に遅延してHttpSession.invalidate()を行う。
    void
    init(jakarta.servlet.FilterConfig filterConfig)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • LazySessionInvalidationFilter

      public LazySessionInvalidationFilter()
  • Method Details

    • init

      public void init(jakarta.servlet.FilterConfig filterConfig) throws jakarta.servlet.ServletException
      Specified by:
      init in interface jakarta.servlet.Filter
      Throws:
      jakarta.servlet.ServletException
    • doFilter

      public void doFilter(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response, jakarta.servlet.FilterChain chain) throws IOException, jakarta.servlet.ServletException
      HttpSessionのラップを行う。 後続処理終了後に遅延してHttpSession.invalidate()を行う。
      Specified by:
      doFilter in interface jakarta.servlet.Filter
      Throws:
      IOException
      jakarta.servlet.ServletException
    • destroy

      public void destroy()
      Specified by:
      destroy in interface jakarta.servlet.Filter