Spec-Zone .ru
спецификации, руководства, описания, API
|
Два аспекта CookieManager
class может быть настроен, CookiePolicy
и CookieStore
.
Для удобства, CookiePolicy
определяет следующие предопределенные политики для того, чтобы принять cookie:
CookiePolicy.ACCEPT_ORIGINAL_SERVER
только принимает cookie от исходного сервера.CookiePolicy.ACCEPT_ALL
принимает все cookie.CookiePolicy.ACCEPT_NONE
не принимает cookie.shouldAccept
метод CookiePolicy
. Можно тогда использовать это CookiePolicy
передавая это к мультипараметру CookieManager
конструктор или вызывая setCookiePolicy(cookiePolicy)
метод, чтобы изменить уже существующего менеджера по cookie. Следующее является примером политики cookie, что cookie отклонений от доменов, которые находятся на черном списке, прежде, чем применяться CookiePolicy.ACCEPT_ORIGINAL_SERVER
политика:
import java.net.*; public class BlacklistCookiePolicy implements CookiePolicy { String[] blacklist; public BlacklistCookiePolicy(String[] list) { blacklist = list; } public boolean shouldAccept(URI uri, HttpCookie cookie) { String host; try { host = InetAddress.getByName(uri.getHost()).getCanonicalHostName(); } catch (UnknownHostException e) { host = uri.getHost(); } for (int i = 0; i<blacklist.length; i++) { if (HttpCookie.domainMatches(blacklist[i], host)) { return false; } } return CookiePolicy.ACCEPT_ORIGINAL_SERVER.shouldAccept(uri, cookie); } }
BlacklistCookiePolicy
экземпляр, Вы передаете это массив строк, представляющих домены, от которых Вы не хотите принимать cookie. Затем, Вы устанавливаете это BlacklistCookiePolicy
экземпляр как политика cookie для Вашего CookieManager
. Например: String[] list = new String[]{ ".example.com" }; CookieManager cm = new CookieManager(null, new BlacklistCookiePolicy(list)); CookieHandler.setDefault(cm);
host.example.com domain.example.com
example.com example.org myhost.example.org
CookieStore
интерфейс, который представляет область хранения для cookie. CookieManager
добавляют cookie к CookieStore
для каждого ответа HTTP и получает cookie от CookieStore
для каждого запроса HTTP. Можно реализовать этот интерфейс, чтобы обеспечить Ваше собственное CookieStore
и передайте это к CookieManager
во время создания. Невозможно установить CookieStore
после CookieManager
экземпляр был создан. Однако, можно получить ссылку на хранилище cookie, вызывая CookieManager.getCookieStore()
. Выполнение так может быть полезным, поскольку оно позволяет Вам усилить значение по умолчанию в памяти CookieStore
реализация, которая обеспечивается Java SE и дополняет его функциональность.
Например, Вы могли бы хотеть создать персистентное хранилище cookie, которое сохранит cookie так, чтобы они могли использоваться, даже если виртуальная машина Java перезапускается. Ваша реализация работала бы подобная следующему:
Следующее является неполным примером этого хранилища cookie. Этот пример показывает Вам, как усилить Java значение по умолчанию SE хранилище cookie в памяти и как Вы могли бы расширить его функциональность.
import java.net.*; import java.util.*; public class PersistentCookieStore implements CookieStore, Runnable { CookieStore store; public PersistentCookieStore() { // get the default in memory cookie store store = new CookieManager().getCookieStore(); // todo: read in cookies from persistant storage // and add them store // add a shutdown hook to write out the in memory cookies Runtime.getRuntime().addShutdownHook(new Thread(this)); } public void run() { // todo: write cookies in store to persistent storage } public void add(URI uri, HttpCookie cookie) { store.add(uri, cookie); } public List<HttpCookie> get(URI uri) { return store.get(uri); } public List<HttpCookie> getCookies() { return store.getCookies(); } public List<URI> getURIs() { return store.getURIs(); } public boolean remove(URI uri, HttpCookie cookie) { return store.remove(uri, cookie); } public boolean removeAll() { return store.removeAll(); } }