public void process(final HttpRequest request, final HttpContext context)
     throws HttpException, IOException {
   context.setAttribute("creds", this.authTokenExtractor.extract(request));
 }
  public void process(final HttpRequest request, final HttpContext context)
      throws HttpException, IOException {
    if (request == null) {
      throw new IllegalArgumentException("HTTP request may not be null");
    }
    if (context == null) {
      throw new IllegalArgumentException("HTTP context may not be null");
    }

    String method = request.getRequestLine().getMethod();
    if (method.equalsIgnoreCase("CONNECT")) {
      return;
    }

    // Obtain cookie store
    CookieStore cookieStore = (CookieStore) context.getAttribute(ClientContext.COOKIE_STORE);
    if (cookieStore == null) {
      this.log.debug("Cookie store not specified in HTTP context");
      return;
    }

    // Obtain the registry of cookie specs
    CookieSpecRegistry registry =
        (CookieSpecRegistry) context.getAttribute(ClientContext.COOKIESPEC_REGISTRY);
    if (registry == null) {
      this.log.debug("CookieSpec registry not specified in HTTP context");
      return;
    }

    // Obtain the target host (required)
    HttpHost targetHost = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
    if (targetHost == null) {
      this.log.debug("Target host not set in the context");
      return;
    }

    // Obtain the client connection (required)
    HttpRoutedConnection conn =
        (HttpRoutedConnection) context.getAttribute(ExecutionContext.HTTP_CONNECTION);
    if (conn == null) {
      this.log.debug("HTTP connection not set in the context");
      return;
    }

    String policy = HttpClientParams.getCookiePolicy(request.getParams());
    if (this.log.isDebugEnabled()) {
      this.log.debug("CookieSpec selected: " + policy);
    }

    URI requestURI;
    if (request instanceof HttpUriRequest) {
      requestURI = ((HttpUriRequest) request).getURI();
    } else {
      try {
        requestURI = new URI(request.getRequestLine().getUri());
      } catch (URISyntaxException ex) {
        throw new ProtocolException(
            "Invalid request URI: " + request.getRequestLine().getUri(), ex);
      }
    }

    String hostName = targetHost.getHostName();
    int port = targetHost.getPort();
    if (port < 0) {
      HttpRoute route = conn.getRoute();
      if (route.getHopCount() == 1) {
        port = conn.getRemotePort();
      } else {
        // Target port will be selected by the proxy.
        // Use conventional ports for known schemes
        String scheme = targetHost.getSchemeName();
        if (scheme.equalsIgnoreCase("http")) {
          port = 80;
        } else if (scheme.equalsIgnoreCase("https")) {
          port = 443;
        } else {
          port = 0;
        }
      }
    }

    CookieOrigin cookieOrigin =
        new CookieOrigin(hostName, port, requestURI.getPath(), conn.isSecure());

    // Get an instance of the selected cookie policy
    CookieSpec cookieSpec = registry.getCookieSpec(policy, request.getParams());
    // Get all cookies available in the HTTP state
    List<Cookie> cookies = new ArrayList<Cookie>(cookieStore.getCookies());
    // Find cookies matching the given origin
    List<Cookie> matchedCookies = new ArrayList<Cookie>();
    Date now = new Date();
    for (Cookie cookie : cookies) {
      if (!cookie.isExpired(now)) {
        if (cookieSpec.match(cookie, cookieOrigin)) {
          if (this.log.isDebugEnabled()) {
            this.log.debug("Cookie " + cookie + " match " + cookieOrigin);
          }
          matchedCookies.add(cookie);
        }
      } else {
        if (this.log.isDebugEnabled()) {
          this.log.debug("Cookie " + cookie + " expired");
        }
      }
    }
    // Generate Cookie request headers
    if (!matchedCookies.isEmpty()) {
      List<Header> headers = cookieSpec.formatCookies(matchedCookies);
      for (Header header : headers) {
        request.addHeader(header);
      }
    }

    int ver = cookieSpec.getVersion();
    if (ver > 0) {
      boolean needVersionHeader = false;
      for (Cookie cookie : matchedCookies) {
        if (ver != cookie.getVersion() || !(cookie instanceof SetCookie2)) {
          needVersionHeader = true;
        }
      }

      if (needVersionHeader) {
        Header header = cookieSpec.getVersionHeader();
        if (header != null) {
          // Advertise cookie version support
          request.addHeader(header);
        }
      }
    }

    // Stick the CookieSpec and CookieOrigin instances to the HTTP context
    // so they could be obtained by the response interceptor
    context.setAttribute(ClientContext.COOKIE_SPEC, cookieSpec);
    context.setAttribute(ClientContext.COOKIE_ORIGIN, cookieOrigin);
  }