In questo articolo completeremo la trattazione dei cookie in Java definendo una nostra policy personalizzata per l'accettazione o meno dei cookie provenienti da un server. Presenteremo inoltre una semplice applicazione demo per testare il tutto.
CookiePolicy
Abbiamo visto come le API Java forniscano policy di default che permettono di respingere tutti i cookie, di accettarli tutti oppure di accettare solo quelli provenienti dal server originale. Esistono situazioni in cui nessuna di queste policy soddisfa il comportamento desiderato, si pensi ad esempio al caso in cui si vogliano respingere tutti i cookie provenienti da server inseriti in una black list.
Consideriamo la gestione di una blacklist di server sulla ricezione dei cookie come caso di studio per l'implementazione di una policy personalizzata. Per realizzare una Custom Policy dobbiamo definire una classe che implementi l'interfaccia java.net.CookiePolicy
fornendo la logica di gestione di un cookie attraverso il metodo shouldAccept(URI,HttpCookie)
:
public class MyCookiePolicy implements CookiePolicy {
String[] blackList;
public MyCookiePolicy(String[] list) {
blackList = list;
}
public boolean shouldAccept(URI uri, HttpCookie cookie) {
String host = uri.getHost();
for (String hostInBl : blackList) {
if (HttpCookie.domainMatches(hostInBl, host)) {
return false;
}
}
return CookiePolicy.ACCEPT_ALL.shouldAccept(uri, cookie);
}
}
Per definire la nostra policy non facciamo altro che scorrere la lista dei domini, da cui non si accettano cookie, confrontando di volta in volta il dominio del cookie in arrivo con quelli della blacklist. Se abbiamo un match respingiamo il cookie restituendo false
.
L'applicazione demo
Concludiamo gli argomenti affrontati fino ad ora proponendo un'applicazione demo che faccia uso del nostro Custom Store e della Custom Policy:
public class CookieApp {
public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, IOException {
CookieManager cookieHandler = new
CookieManager(new MyCookieStore(), new MyCookiePolicy(new String[]{"www.google.it"}));
CookieHandler.setDefault(cookieHandler);
URL url = new URL("http://www.google.it");
URLConnection connection = url.openConnection();
connection.getContent();
CookieStore cookieStore = cookieHandler.getCookieStore();
List<HttpCookie> cookies = cookieStore.getCookies();
for (HttpCookie cookie : cookies) {
System.out.println("CookieHandler cookie recuperato: " + cookie);
}
}
}
Per verificare il funzionamento di aggiunta e respingimento dei cookie, modifichiamo la blacklist della nostra policy ed eventualmente anche l'URL di connessione.