@Override
  public void intercept(HttpContentRequestImpl proxyRequest, PortletRequest portletRequest) {

    // if the user isn't already authenticated, perform any required
    // authentication pre-processing
    final PortletSession session = portletRequest.getPortletSession();
    synchronized (PortletUtils.getSessionMutex(session)) {
      if (!isAlreadyAuthenticated(portletRequest)) {
        prepareAuthentication(proxyRequest, portletRequest);
      }
      session.setAttribute(AUTHENTICATION_TIMEOUT_KEY, System.currentTimeMillis());
    }
  }
  /**
   * Serve the resource as specified in the given request to the given response, using the
   * PortletContext's request dispatcher.
   *
   * <p>This is roughly equivalent to Portlet 2.0 GenericPortlet.
   *
   * @param request the current resource request
   * @param response the current resource response
   * @param context the current Portlet's PortletContext
   * @throws PortletException propagated from Portlet API's forward method
   * @throws IOException propagated from Portlet API's forward method
   */
  public static void serveResource(
      ResourceRequest request, ResourceResponse response, PortletContext context)
      throws PortletException, IOException {

    String id = request.getResourceID();
    if (id != null) {
      if (!PortletUtils.isProtectedResource(id)) {
        PortletRequestDispatcher rd = context.getRequestDispatcher(id);
        if (rd != null) {
          rd.forward(request, response);
          return;
        }
      }
      response.setProperty(ResourceResponse.HTTP_STATUS_CODE, "404");
    }
  }