Ejemplo n.º 1
0
 public void destroy() {
   for (Iterator it = _aues.values().iterator(); it.hasNext(); ) {
     final AuExtension aue = (AuExtension) it.next();
     try {
       aue.destroy();
     } catch (Throwable ex) {
       log.warningBriefly("Unable to stop " + aue, ex);
     }
   }
 }
Ejemplo n.º 2
0
  /**
   * Adds an AU extension and associates it with the specified prefix.
   *
   * <p>If there was an AU extension associated with the same name, the the old AU extension will be
   * replaced.
   *
   * <p>If you want to add an Au extension, even before DHtmlUpdateServlet is started, use {@link
   * #addAuExtension(WebApp, String, AuExtension)} instead.
   *
   * @param prefix the prefix. It must start with "/", but it cannot be "/" nor "/web" (which are
   *     reserved).
   * @param extension the AU extension (never null).
   * @return the previous AU extension associated with the specified prefix, or null if the prefix
   *     was not associated before.
   * @see #addAuExtension(WebApp,String,AuExtension)
   * @since 5.0.0
   */
  public AuExtension addAuExtension(String prefix, AuExtension extension) throws ServletException {
    checkAuExtension(prefix, extension);

    if (_aues.get(prefix) == extension) // speed up to avoid sync
    return extension; // nothing changed

    extension.init(this);

    // To avoid using sync in doGet(), we make a copy here
    final AuExtension old;
    synchronized (this) {
      final Map ps = new HashMap(_aues);
      old = (AuExtension) ps.put(prefix, extension);
      _aues = ps;
    }
    if (old != null)
      try {
        old.destroy();
      } catch (Throwable ex) {
        log.warningBriefly("Unable to stop " + old, ex);
      }
    return old;
  }
Ejemplo n.º 3
0
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    final String pi = Https.getThisPathInfo(request);
    //		if (log.finerable()) log.finer("Path info: "+pi);

    final ServletContext ctx = getServletContext();
    final boolean withpi = pi != null && pi.length() != 0;
    if (withpi && pi.startsWith(ClassWebResource.PATH_PREFIX)) {
      // use HttpSession to avoid loading SerializableSession in GAE
      // and don't retrieve session if possible
      final ClassWebResource cwr = getClassWebResource();
      final HttpSession hsess = shallSession(cwr, pi) ? request.getSession(false) : null;
      Object oldsess = null;
      if (hsess == null) {
        oldsess = SessionsCtrl.getRawCurrent();
        SessionsCtrl.setCurrent(new SessionResolverImpl(ctx, request));
        // it might be created later
      }

      WebApp wapp;
      Session sess;
      final Object old =
          hsess != null
              ? (wapp = WebManager.getWebAppIfAny(ctx)) != null
                      && (sess = SessionsCtrl.getSession(wapp, hsess)) != null
                  ? I18Ns.setup(sess, request, response, "UTF-8")
                  : I18Ns.setup(hsess, request, response, "UTF-8")
              : Charsets.setup(null, request, response, "UTF-8");
      try {
        cwr.service(request, response, pi.substring(ClassWebResource.PATH_PREFIX.length()));
      } finally {
        if (hsess != null) I18Ns.cleanup(request, old);
        else {
          Charsets.cleanup(request, old);
          SessionsCtrl.setRawCurrent(oldsess);
        }
      }
      return; // done
    }

    final Session sess = WebManager.getSession(ctx, request, false);
    if (withpi) {
      final AuExtension aue = getAuExtensionByPath(pi);
      if (aue == null) {
        response.sendError(response.SC_NOT_FOUND);
        log.debug("Unknown path info: " + pi);
        return;
      }

      Object oldsess = null;
      if (sess == null) {
        oldsess = SessionsCtrl.getRawCurrent();
        SessionsCtrl.setCurrent(new SessionResolverImpl(ctx, request));
        // it might be created later
      }

      final Object old =
          sess != null
              ? I18Ns.setup(sess, request, response, "UTF-8")
              : Charsets.setup(null, request, response, "UTF-8");
      try {
        aue.service(request, response, pi);
      } finally {
        if (sess != null) I18Ns.cleanup(request, old);
        else {
          Charsets.cleanup(request, old);
          SessionsCtrl.setRawCurrent(oldsess);
        }
      }
      return; // done
    }

    // AU
    if (sess == null) {
      response.setIntHeader("ZK-Error", response.SC_GONE); // denote timeout

      // Bug 1849088: rmDesktop might be sent after invalidate
      // Bug 1859776: need send response to client for redirect or others
      final WebApp wapp = WebManager.getWebAppIfAny(ctx);
      final String dtid = getAuDecoder(wapp).getDesktopId(request);
      if (dtid != null) sessionTimeout(request, response, wapp, dtid);
      return;
    }

    // Feature 3285074 add no-cache for security risk.
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Cache-Control", "no-store");
    response.setHeader("Expires", "-1");

    final Object old = I18Ns.setup(sess, request, response, "UTF-8");
    try {
      process(sess, request, response);
    } finally {
      I18Ns.cleanup(request, old);
    }
  }