gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:51:04 26 4
gpt4 key购买 nike

您好,我一直无法解决 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com