Spring Security 3.0.x を使用しているため、ここで説明されているようにカスタム sessionManagementFilter を使用できます。
クラス com.icesoft.spring.security.JsfRedirectStrategy はこちらから入手できます
Spring Security 3.1.x を使用している場合は、これらの変更を行います
<beans:bean id="sessionManagementFilter" class="org.springframework.security.web.session.SessionManagementFilter">
<beans:constructor-arg name="securityContextRepository" ref="httpSessionSecurityContextRepository" />
<!-- this permits redirection to session timeout page from javascript/ajax or http -->
<beans:property name="invalidSessionStrategy" ref="jsfRedirectStrategy" />
</beans:bean>
<beans:bean id="jsfRedirectStrategy" class="com.icesoft.spring.security.JsfRedirectStrategy">
<beans:constructor-arg name="invalidSessionUrl" value="/general/logins/sessionExpired.jsf" />
</beans:bean>
<beans:bean id="httpSessionSecurityContextRepository" class="org.springframework.security.web.context.HttpSessionSecurityContextRepository"/>
JSFRedirectStrategy クラスの唯一の変更点は、最初の数行です。
public class JsfRedirectStrategy implements InvalidSessionStrategy {
protected final Log logger = LogFactory.getLog(getClass());
private String invalidSessionUrl;
private boolean contextRelative;
public JsfRedirectStrategy(String invalidSessionUrl){
this.invalidSessionUrl=invalidSessionUrl;
}
@Override
public void onInvalidSessionDetected(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
String redirectUrl = calculateRedirectUrl(request.getContextPath(), invalidSessionUrl);
これはIE8でも動作します。興味のある方はこのブログもご覧ください。上記の方がはるかに簡単だったので、私はこれを試したことはありません。
参考までに: Spring を使用しない場合、これを行うには多くの方法があります。Primefaces はサイトでこれを行います。link
または、Omnifaces jar をインポートすることでさらに簡単になりますlink