Display message to user on expired session when using wicket-auth-roles -
hi have been unable solve following problem in wicket 6.*:
in our webapp using wicket-auth-roles manage authentication/authorization. when session expires, user should redirected page set getapplicationsettings().setpageexpirederrorpage(somepage.class)
on next action. however, if user tries access page doesn't allow guests, redirected login page skipping pageexpiredpage altogether.
my question - how can display "session has expired." message user?
among other things, have tried session.info("message")
during oninvalidate
phase of session's lifecycle, feedback message rendered on first page after login (not on login page).
thank anwsers.
you use requestcyclelistener
record when pageexpiredexception
thrown.
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 renderpagerequesthandler , add page parameter // see defaultexceptionmapper#internalmap(exception) } return null; } } // in application#init(): getrequestcyclelisteners().add(new exceptionmapperlistener());
orinal answer
(kept because still help...)
i haven't tried myself since don't use wicket-auth-roles, try overriding method authenticatedwebapplication#restartresponseatsigninpage()
this:
if (issessionexpired()) { pageparameters params = new pageparameters(); params.add("showsessionexpired", true); throw new restartresponseatinterceptpageexception(getsigninpageclass(), params); } else { throw new restartresponseatinterceptpageexception(getsigninpageclass()); }
and in signinpageclass, display desired message if showsessionexpired
page parameter present.
i'm not sure how implement issessionexpired()
, seem have part covered.
or
depending on how implemented issessionexpired()
, maybe following in signinpageclass:
if (sessionexpired()) { session.info("message") }
Comments
Post a Comment