session - 使用 wicket-auth-roles 时在 session 过期时向用户显示消息

标签 session wicket session-timeout wicket-1.6

您好,我一直无法解决 Wicket 6 中的以下问题。*:

在我们的网络应用程序中,我们使用 wicket-auth-roles 来管理身份验证/授权。当 session 过期时,用户应该被重定向到由 getApplicationSettings().setPageExpiredErrorPage(SomePage.class) 为他的下一步操作设置的页面。但是,如果用户尝试访问不允许访客访问的页面,他将被重定向到一个登录页面,完全跳过 PageExpiredPage。

我的问题是 - 如何显示“ session 已过期”。给用户的消息?

除其他事项外,我在 session 生命周期的 onInvalidate 阶段尝试了 session.info("message"),但是反馈消息随后呈现在第一页上登录后(不在登录页面上)。

感谢您的回答。

最佳答案

您可以使用 RequestCycleListener 来记录何时抛出 PageExpiredException

public class ExceptionMapperListener extends AbstractRequestCycleListener {

    @Override
    public IRequestHandler onException(RequestCycle cycle, Exception ex) {
        if (ex instanceof PageExpiredException) {
            // Record in session or request cycle
            // OR
            // Create a RenderPageRequestHandler yourself and add a page parameter
            // See DefaultExceptionMapper#internalMap(Exception)
        }
        return null;
    }
}

// In Application#init():
getRequestCycleListeners().add(new ExceptionMapperListener());

原始答案

(保留因为它仍然可以帮助...)

我自己没有尝试过,因为我不使用 wicket-auth-roles,但是尝试用类似这样的方法覆盖方法 AuthenticatedWebApplication#restartResponseAtSignInPage():

if (isSessionExpired()) {
    PageParameters params = new PageParameters();
    params.add("showSessionExpired", true);
    throw new RestartResponseAtInterceptPageException(getSignInPageClass(), params);
} else {
    throw new RestartResponseAtInterceptPageException(getSignInPageClass());
}

然后在 SignInPageClass 中,如果存在 showSessionExpired 页面参数,则显示所需的消息。

我不确定你是如何实现 isSessionExpired() 的,但你似乎已经涵盖了那部分内容。

根据您如何实现 isSessionExpired(),也许您可​​以在 SignInPageClass 中执行以下操作:

if (sessionExpired()) {
    session.info("message")
}

关于session - 使用 wicket-auth-roles 时在 session 过期时向用户显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22614003/

相关文章:

hibernate - 将 Hibernate 条件查询转换为 JPA 2 条件查询

android - 使用 Facebook SDK 3.0 登录 facebook

java - 如何将 Wicket FormComponentPanel 的标记放入 wicket :fragment? 内

java - Wicket 1.4 中文本字段更改行为的容器可见性控制

javascript - Wicket:通过 Javascript 更新文本字段

php - 关于 PHP session 的几个问题

session - Web应用程序如何处理多个浏览器窗口

asp.net-mvc - MVC session 到期但未进行身份验证

asp.net - asp.net 应用程序中的 session 变量超时

session - 使用 express/redis 进行 session 存储时,“ session ”未定义