public static String checkForComponentEvent(
      String pageName,
      String componentId,
      String eventId,
      String eventType,
      ApplicationStateManager applicationStateManager,
      ComponentSource componentSource,
      MetaDataLocator locator) {

    String redirectPage = null;
    String authenticationPolicyMeta =
        EVENT_HANDLER_AUTHENTICATION_TYPE + "-" + eventId + "-" + eventType;
    authenticationPolicyMeta = authenticationPolicyMeta.toLowerCase();

    Component component = null;
    if (componentId == null) {
      component = componentSource.getPage(pageName);
    } else {
      component = componentSource.getComponent(pageName + ":" + componentId);
    }
    try {
      String policyAsString =
          locator.findMeta(
              authenticationPolicyMeta, component.getComponentResources(), String.class);
      AuthenticationPolicyType policy = AuthenticationPolicyType.valueOf(policyAsString);
      redirectPage = AuthenticationValidator.check(policy, applicationStateManager);
    } catch (RuntimeException e) {
      System.err.println(e.getMessage());
    }
    return redirectPage;
  }
  /**
   * Check the rights of the user for the page requested
   *
   * @throws IOException
   */
  public boolean checkAccess(String pageName, Request request, Response response)
      throws IOException {
    System.out.println("ENTER checkAccess");
    if (_request != null
        && _request.getHeader("EAAHash") != null
        && !_request.getHeader("EAAHash").equals("")) {
      System.out.println("EAA Headers present");
      System.out.println("asm.exists(UserSession.class): " + asm.exists(UserSession.class));

      if (!asm.exists(UserSession.class)) {
        asm.set(UserSession.class, new UserSessionImpl());
        UserSession userSession = asm.get(UserSession.class);
        userSession.setLoggedIn(true);
        userSession.setUserName(_request.getHeader("uid"));
        userSession.setIdP(_request.getHeader("Shib-Identity-Provider"));
        System.out.println("Creating Session");
      } else if (asm.get(UserSession.class).getUserName() == null
          || asm.get(UserSession.class).getUserName().equals("")) {
        UserSession userSession = asm.get(UserSession.class);
        userSession.setLoggedIn(true);
        userSession.setUserName(_request.getHeader("uid"));
        userSession.setIdP(_request.getHeader("Shib-Identity-Provider"));
        System.out.println("Editing existing Session");
      }
    }

    boolean canAccess = true;

    /* Is the requested page private ? */
    Component page = componentSource.getPage(pageName);
    boolean privatePage = page.getClass().getAnnotation(Private.class) != null;
    if (privatePage) {
      canAccess = false;
      /* Is the user already authentified ? */
      if (asm.exists(UserSession.class)) {
        UserSession userSession = asm.get(UserSession.class);
        canAccess = userSession.isLoggedIn();
      }
    }

    /*
     * This page can't be requested by a non authentified user => we
     * redirect him on the signon page
     */
    System.out.println("EXIT checkAccess");
    if (!canAccess) {
      response.sendRedirect(request.getContextPath() + LOGIN_PAGE);
      return true; // Make sure to leave the chain
    }

    return false;
  }
  public static String checkForPage(
      String pageName,
      ApplicationStateManager applicationStateManager,
      ComponentSource componentSource,
      MetaDataLocator locator) {

    String redirectPage = null;
    Component page = componentSource.getPage(pageName);
    try {
      String policyAsString =
          locator.findMeta(PAGE_AUTHENTICATION_TYPE, page.getComponentResources(), String.class);

      AuthenticationPolicyType policy = AuthenticationPolicyType.valueOf(policyAsString);
      redirectPage = check(policy, applicationStateManager);
    } catch (RuntimeException e) {
      System.err.println(e.getMessage());
    }
    return redirectPage;
  }