Java 是否可以在PhaseListener中捕获ViewExpriedException?
出于日志记录的目的,我感兴趣的是检测JSF应用程序中何时发生会话超时 我已经实现了一个PhaseListener,它可以检查用户是否已登录并且其会话是否已处于活动状态。我对afterPhase方法的实施是:Java 是否可以在PhaseListener中捕获ViewExpriedException?,java,jsf,richfaces,session-timeout,jsf-1.2,Java,Jsf,Richfaces,Session Timeout,Jsf 1.2,出于日志记录的目的,我感兴趣的是检测JSF应用程序中何时发生会话超时 我已经实现了一个PhaseListener,它可以检查用户是否已登录并且其会话是否已处于活动状态。我对afterPhase方法的实施是: varurl\u accepted(在代码中使用)包含一个公共页面列表,用户应该可以访问这些页面以提供登录表单 public void afterPhase(PhaseEvent event) { FacesContext context = event.getFacesConte
- varurl\u accepted(在代码中使用)包含一个公共页面列表,用户应该可以访问这些页面以提供登录表单
public void afterPhase(PhaseEvent event) { FacesContext context = event.getFacesContext(); HttpSession session = (HttpSession) context.getExternalContext().getSession(true); AuthenticationBean sessionBean = (AuthenticationBean) session.getAttribute("sessionBean"); String url_req = context.getViewRoot().getViewId(); //1. Check if user has a session and is logged in: if(((sessionBean == null) || (sessionBean != null && !sessionBean.isLoggedIn())) && !url_accepted.contains(url_req)){ context.getApplication().getNavigationHandler().handleNavigation(context,null,"auth_error"); return; } //2. Code continues in order to check if a logged user has permissions to access the requested page(not relevant): }
提前感谢。我在JSF项目中遇到过同样的情况。解决方案是使用筛选器捕获已过期的会话。BalusC(JSF专家)解释了这一点,并给出了一个很好的例子:
另外,不要忘记添加注销方法和会话超时处理程序。感谢您的参考和建议。我会看看我是否能在我的项目中采用这个BalusC解决方案。如果你有任何问题,只需更新你的帖子并在这里留下评论,这样我就能帮助你。我一直在分析BalusC提出的示例,但我不知道他是如何管理超时注销的。我认为他没有采取任何行动。我在应用程序中遇到的问题已经适用于会话超时,但我需要捕获它发生的时间,以便记录由于此原因而断开连接的用户。如果它已经在BalusC代码中实现,请告诉我,我将深入挖掘代码中的更多细节。