All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.whaleal.icefrog.http.cookie.GlobalCookieManager Maven / Gradle / Ivy

The newest version!
package com.whaleal.icefrog.http.cookie;

import com.whaleal.icefrog.core.io.IORuntimeException;
import com.whaleal.icefrog.core.util.URLUtil;
import com.whaleal.icefrog.http.HttpConnection;

import java.io.IOException;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.net.HttpCookie;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 全局Cookie管理器,只针对icefrog请求有效
 *
 * @author Looly
 * @author wh
 * @since 1.0.0
 */
public class GlobalCookieManager {

    /**
     * Cookie管理
     */
    private static CookieManager cookieManager;

    static {
        cookieManager = new CookieManager(new ThreadLocalCookieStore(), CookiePolicy.ACCEPT_ALL);
    }

    /**
     * 获取全局{@link CookieManager}
     *
     * @return {@link CookieManager}
     */
    public static CookieManager getCookieManager() {
        return cookieManager;
    }

    /**
     * 自定义{@link CookieManager}
     *
     * @param customCookieManager 自定义的{@link CookieManager}
     */
    public static void setCookieManager( CookieManager customCookieManager ) {
        cookieManager = customCookieManager;
    }

    /**
     * 获取指定域名下所有Cookie信息
     *
     * @param conn HTTP连接
     * @return Cookie信息列表
     * @since 1.0.0
     */
    public static List getCookies( HttpConnection conn ) {
        return cookieManager.getCookieStore().get(getURI(conn));
    }

    /**
     * 将本地存储的Cookie信息附带到Http请求中,不覆盖用户定义好的Cookie
     *
     * @param conn {@link HttpConnection}
     */
    public static void add( HttpConnection conn ) {
        if (null == cookieManager) {
            // 全局Cookie管理器关闭
            return;
        }

        Map> cookieHeader;
        try {
            cookieHeader = cookieManager.get(getURI(conn), new HashMap<>(0));
        } catch (IOException e) {
            throw new IORuntimeException(e);
        }


        // 不覆盖模式回填Cookie头,这样用户定义的Cookie将优先
        conn.header(cookieHeader, false);
    }

    /**
     * 存储响应的Cookie信息到本地
     *
     * @param conn {@link HttpConnection}
     */
    public static void store( HttpConnection conn ) {
        if (null == cookieManager) {
            // 全局Cookie管理器关闭
            return;
        }

        try {
            cookieManager.put(getURI(conn), conn.headers());
        } catch (IOException e) {
            throw new IORuntimeException(e);
        }
    }

    /**
     * 获取连接的URL中URI信息
     *
     * @param conn HttpConnection
     * @return URI
     */
    private static URI getURI( HttpConnection conn ) {
        return URLUtil.toURI(conn.getUrl());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy