Our use
case was that we needed to support different timeouts for different application
roles. This because our internal users are using the same application as our
external users. There is no default support for this behavior in ADF, but you
can achieve this by using a PagePhaseListener.
In our
production application we used different settings, but for this example I
configured the following web.xml parameters:
3 oracle.adf.view.rich.sessionHandling.WARNING_BEFORE_TIMEOUT 60
The
session-timeout is set to 3 minutes and we want to show the default ADF warning
popup 1 minute before the session expires. In case of a internal user login, the
session-timeout parameter get overridden.
This is
achieved by creating a PagePhaseListener:
public class PortalPhaseListener implements PagePhaseListener { private static final int INTERNAL_TIMEOUT = 360; public void beforePhase(PagePhaseEvent pagePhaseEvent) { if (pagePhaseEvent.getPhaseId() == JSFLifecycle.JSF_RESTORE_VIEW_ID) { final ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext(); final SecurityContext secCtx = ADFContext.getCurrent().getSecurityContext(); if (secCtx.isAuthenticated() && isInternalUser()) { final HttpServletRequest httpServletRequest = (HttpServletRequest) ectx.getRequest(); httpServletRequest.getSession().setMaxInactiveInterval(INTERNAL_TIMEOUT); } } } }
I decided
to do this in the restore view phase, first we check if the user is logged on
and if the user has the internal role. If both are true, we set the
MaxInactiveInterval on the HttpSession.
Now the
timeout becomes 6 minutes, meaning that after 5 minutes the default ADF popup will
show, informing the user that the session will expire if no activity is shown
within the next minute.
The result
is a different session timeout for different user roles, you can do this for as
many roles as you like, making your timeout settings more flexible.
Great solution, unfortunately it does not seem to work within Oracle WebCenter Portal: Spaces. The phase listener works, but the sessions still time out after the period configured in webcenter-config.xml
ReplyDeletehttp://docs.oracle.com/cd/E29597_01/webcenter.1111/e12405/wcadm_gen_prop.htm#BCEHFHCH