HttpSessionの情報をクライアントのクッキーに保存するためのCookieSessionFilter 0.0.2をリリースしました。
このバージョンでの新機能は以下の通りです。
- プリミティブ型のラッパー型と配列を直接セッションにセットできるようになりました。
- HttpSession#setMaxInactiveInterval() もしくはweb.xmlの設定でセッションのタイムアウト時間を設定できるようになりました。
- レスポンスがフラッシュされた場合はそのタイミングでセッションクッキーを書き出すようになりました。
- web.xmlの設定でHttpSessionAttribuiteListenerが使えるようになりました。
web.xmlでのタイムアウトやリスナの設定は通常のHttpSessionの場合とは異なり、以下のようにCookieSessionFilterの初期化パラメータとして指定する必要があります。
<filter> <filter-name>cookieSessionFilter</filter-name> <filter-class>jp.sf.amateras.cookiesession.CookieSessionFilter</filter-class> <!-- クッキーの暗号化の設定 --> <init-param> <param-name>cipher</param-name> <param-value>jp.sf.amateras.cookiesession.cipher.BlowfishCipher</param-value> </init-param> <init-param> <param-name>key</param-name> <param-value>1234</param-value> </init-param> <!-- リスナの設定(カンマ区切りで複数クラスを指定可能) --> <init-param> <param-name>listeners</param-name> <param-value>jp.sf.amateras.cookiesession.util.HttpSessionAttributeTraceListener</param-value> </init-param> <!-- セッションタイムアウトの設定(分単位) --> <init-param> <param-name>timeout</param-name> <param-value>1</param-value> </init-param> </filter> <filter-mapping> <filter-name>cookieSessionFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping>
いまのところHttpSessionAttributeListener以外のリスナはサポートする予定はありません。これはCookieSessionFilterではレプリケーションのためにセッションをシリアライズしたりすることがないのと、セッションの破棄もgetSession()でセッションを取得するタイミングで判定しているため、HttpSessionListenerやHttpSessionActivationListenerに通知するイベントが発生しない、もしくは通常通りのタイミングで通知することができないためです。
今後のバージョンではセッションの読み込み・書き出し部分やオブジェクトのシリアライズ・デシリアライズ部分をコンポーネント化して差し替えられるようにしようと考えています。これによってクッキーではなくmemcachedやDBにも永続化したり、JSONではなくバイナリシリアライズしたりできるようになります。