由于您使用 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 在他们的网站上这样做。链接
或者通过导入 Omnifaces jar链接更简单