我不重定向或我的用户转发到另一个页面。 所以当我SessionExpiredExceptionHandler
(扩展ExceptionHandlerWrapper
)处理ViewExireException。 我希望用户停留在同一页面上,并显示一个对话框PrimeFaces。 对于通知的会话已过期,用户需要重新登录(基于对话框)。 我使用的Servlet 3.1功能登录/注销用户和Basic/file
面向auth-方法给用户不同的系统角色映射。
现在的情况是,查看/页面刷新获得后2分钟,但会议没有得到失效。 只有当页面刷新,4分钟后发生第二次。
<session-config>
<session-timeout>2</session-timeout>
</session-config>
编辑:这是由meta标签刷新:
<meta http-equiv="refresh" content="#{session.maxInactiveInterval}" />
我怎样才能让SessionExpiredExceptionHandler
当异常发生第一次失效会话对象(Servlet的注销),我怎么能在客户端显示PrimeFaces对话框中调用一个JavaScript(expireDlg.show())?
我已经看了一些其他线程,但没有找到一个可行的解决方案。 会话超时
SessionExpiredExceptionHandler
@Override
public void handle() throws FacesException {
for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();) {
ExceptionQueuedEvent event = i.next();
ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
Throwable t = context.getException();
if (t instanceof ViewExpiredException) {
ViewExpiredException vee = (ViewExpiredException) t;
FacesContext fc = FacesContext.getCurrentInstance();
Map<String, Object> requestMap = fc.getExternalContext().getRequestMap();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
try {
requestMap.put("currentViewId", vee.getViewId());
nav.handleNavigation(fc, null, "Home");
fc.renderResponse();
} finally {
i.remove();
}
}
}
// At this point, the queue will not contain any ViewExpiredEvents.
// Therefore, let the parent handle them.
getWrapped().handle();
}
web.xml中
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/home.xhtml</location>
</error-page>