View Javadoc
1   /*
2    * Licensed under the Apache License, Version 2.0 (the "License");
3    * you may not use this file except in compliance with the License.
4    * You may obtain a copy of the License at
5    *
6    * http://www.apache.org/licenses/LICENSE-2.0
7    *
8    * Unless required by applicable law or agreed to in writing, software
9    * distributed under the License is distributed on an "AS IS" BASIS,
10   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11   * See the License for the specific language governing permissions and
12   * limitations under the License.
13   *
14   */
15  
16  package org.esigate.http.cookie;
17  
18  import org.apache.http.annotation.Contract;
19  import org.apache.http.annotation.ThreadingBehavior;
20  import org.apache.http.cookie.CookieSpec;
21  import org.apache.http.cookie.CookieSpecProvider;
22  import org.apache.http.impl.cookie.AbstractCookieSpec;
23  import org.apache.http.impl.cookie.BrowserCompatSpec;
24  import org.apache.http.impl.cookie.BrowserCompatSpecFactory.SecurityLevel;
25  import org.apache.http.protocol.HttpContext;
26  
27  /**
28   * A BrowserCompatSpecFactory that registers HttpOnly handler and disables path validation.
29   * 
30   * @author Alexis Thaveau on 21/10/14.
31   */
32  @Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
33  public class CustomBrowserCompatSpecFactory implements CookieSpecProvider {
34  
35      /**
36       * Constant for HttpClient configuration.
37       */
38      public static final String CUSTOM_BROWSER_COMPATIBILITY = "custom_browser_compatibility";
39  
40      @Override
41      public CookieSpec create(final HttpContext context) {
42          // SecurityLevel.SECURITYLEVEL_IE_MEDIUM disables path validation
43          AbstractCookieSpec cookieSpec = new BrowserCompatSpec(null, SecurityLevel.SECURITYLEVEL_IE_MEDIUM);
44          cookieSpec.registerAttribHandler(CookieUtil.HTTP_ONLY_ATTR, new HttpOnlyHandler());
45          return cookieSpec;
46      }
47  
48  }