spring / spring-security 3.1を使用しており、ユーザーがログアウトするたびに(または、セッションがタイムアウトした場合)、何らかのアクションを実行したいと考えています。ログアウトのためにアクションを実行することができましたが、セッションタイムアウトのために、それを機能させることができません。
web.xmlでは、ContextLoaderListener(これが問題になる可能性がありますか?)と、もちろんDelegatingFilterProxyのみが指定されています。
私はこのような自動設定を使用します。
<security:http auto-config="false" use-expressions="false">
<security:intercept-url pattern="/dialog/*"
access="ROLE_USERS" />
<security:intercept-url pattern="/boa/*"
access="ROLE-USERS" />
<security:intercept-url pattern="/*.html"
access="ROLE-USERS" />
<security:form-login login-page="/auth/login.html"
default-target-url="/index.html" />
<security:logout logout-url="/logout"
invalidate-session="true"
delete-cookies="JSESSIONID" success-handler-ref="logoutHandler" />
</security:http>
<bean id="logoutHandler" class="com.bla.bla.bla.LogoutHandler">
<property name="logoutUrl" value="/auth/logout.html"/>
</bean>
ユーザーがログアウトをクリックすると、ログアウトハンドラーが呼び出されます。これにより、データベースが呼び出されます。
しかし、どうすればセッションタイムアウトを処理できますか?
これを処理する1つの方法は、ユーザーがログインしたときにユーザー名をセッションに挿入し、通常のhttpsessionlistenerを使用して、セッションのタイムアウト時に同じことを行うことです。
Springのセキュリティにも同様の方法があります。これにより、Springがセッションのタイムアウトを検出したときに、そこに接続して認証にアクセスし、そこからUserDetailsを取得して、クリーンアップを実行できます。