Java的CookieManager

news2024/11/19 10:33:31

文章目录

    • 1. 简介
    • 2. CookieStore

1. 简介

Java5包括一个抽象类Java.net.CookieHandler,它定义了存储和获取Cookie的一个API,但不包括这个抽象类的实现,所以还有很多工作要做。Java6进一步作了补充,为CookieManager增加了一个可以使用的具体子类java.net.CookieManager。不过默认情况下Cookie并不打开。在Java存储和返回Cookie之前,需要先启动cookie

CookieManager manager=new CookieManager();
CookieManager.setDefault(manager)

用这两行代码安装一个CookieManager之后,对于你用URL类连接的HTTP服务器,Java会存储这些服务器发送的所有Cookie,在后续的请求中向这些服务器发回所存储的cookie,不过,对于接受哪里发送的Cookie,可以通过指定一个CookiePolicy来做到

  • CookiePolicy.ACCEPT_ALL接受所有的cookie
  • CookiePolicy.ACCEPT_NONE不接受任何cookie
  • CookiePolicy.ACCEPT_ORIFINAL_SERVER值接受一方的cookie

下面这段代码只接受一方的cookie,而会阻塞第三方的cookie(即只接受与你对话的服务器发送的cookie,而不接受Internet上其它服务器发送的cookie):

CookieManager manager=new CookieManager();
manager.setCoolkiePolicy(CookiePolicy.AACCEPT_ORIFINAL_SERVER);
CookieHandler.setDefault(manager)

下面这段代码我们自行实现了CookiePolicy接口,并覆盖了shouldAccept()方法:

public class NoGovermentCoolies implements CookiePolicy{
	@Override
	public boolean shouldAccept(URI uri,HttpCookie cookie){
	   if(uri.getAuthority().toLowerCase().endWith(".gov") || cookie.getDomain().toLowerCase().endWith(".gov")){
	    return false;
	   }
	   return true;
	}
}

2. CookieStore

有时有必要在本地存放和获取Cookie。一个应用退出时,可以把cookie库保存在磁盘上,下一次启动时再加载这些cookie。可以用getCookieStore()方法获取这个cookie库,CookieManager就在这里保存它的cookie

CookieStore store=manager.getCookieStore()

CookieStore类允许你增加,删除和列出cookie,使你能控制在正常HTTP请求和响应流之外发送的cookie

public void add(URI uri, HttpCookie cookie)
public List<HttpCookie> get(URI uri)
public List<HttpCookie> getCookies()
public List<URI> getURIs()
public boolean remove(URI uri,HttpCookie cookie)
public boolean removeAll()
  • public void add(URI uri, HttpCookie cookie)

将一个 HTTP cookie 添加到存储区。每个传入的 HTTP 响应都会调用此函数。要存储的 Cookie 可能与 URI 相关联,也可能不关联。如果它不与 URI 关联,则 Cookie 的域和路径属性将指示它的来源。如果它与 URI 相关联,并且未指定其域和路径属性,则给定 URI 将指示此 cookie 的来源。如果与给定 URI 对应的 cookie 已经存在,则将其替换为新的 cookie。

public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
            URL u=new URL("http://www.baidu.com");
            //创建socket连接指定的网站
            URLConnection uc=u.openConnection();
            //创建一个CookieManager对象
            CookieManager cookieManager=new CookieManager();
            //设置接受cookie的范围(只接受百度服务器发送过来的)
            cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER);
            CookieHandler.setDefault(cookieManager);
            CookieStore store=cookieManager.getCookieStore();
            URI uri=u.toURI();
            //新建一个cookie
            HttpCookie cookie=new HttpCookie("skin","noskin");
            store.add(uri,cookie);
            System.out.println(store.get(uri));
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }
}

在这里插入图片描述

  • public List<HttpCookie> get(URI uri)
public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
            URL u=new URL("http://www.baidu.com");
            //创建socket连接指定的网站
            URLConnection uc=u.openConnection();
            //创建一个CookieManager对象
            CookieManager cookieManager=new CookieManager();
            //设置接受cookie的范围(只接受百度服务器发送过来的)
            cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER);
            CookieHandler.setDefault(cookieManager);
            CookieStore store=cookieManager.getCookieStore();
            URI uri=u.toURI();
            //新建一个cookie
            HttpCookie cookie=new HttpCookie("skin","noskin");
            store.add(uri,cookie);
            System.out.println(store.get(uri).toString());
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }
}
  • public boolean remove(URI uri,HttpCookie cookie)
public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
            URL u=new URL("http://www.baidu.com");
            //创建socket连接指定的网站
            URLConnection uc=u.openConnection();
            //创建一个CookieManager对象
            CookieManager cookieManager=new CookieManager();
            //设置接受cookie的范围(只接受百度服务器发送过来的)
            cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER);
            CookieHandler.setDefault(cookieManager);
            CookieStore store=cookieManager.getCookieStore();
            URI uri=u.toURI();
            //新建一个cookie
            HttpCookie cookie=new HttpCookie("skin","noskin");
            store.add(uri,cookie);
            System.out.println(store.get(uri).toString());
            System.out.println(store.remove(uri,cookie));
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

领导让我搭建Appium环境,还好我看到了这篇文章

首先介绍一下&#xff0c;Appium是一个APP的自动化框架&#xff0c;可用于测试APP、网页(web)、混合型应用&#xff0c;而且是跨平台(可以针对不同平台用一套api来编写测试用例)的。 pythonAppium自动化测试框架【项目实战合集】&#xff0c;轻松掌握app高级自动化测试_哔哩哔…

Redis 的数据类型和命令帮助

文章结构 Redis 数据类型1. Redis全局命令&#xff08;跟key有关系&#xff0c;而跟value无关&#xff09;2. StringsGetting and setting StringsManaging counters 3. Lists(L)Basic commandsBlocking commands 4. Sets(S)Basic commands 5. Hashes(H)Basic commands 6. Sort…

2.VirtualBox安装CentOS 7

安装VirtualBox 到https://www.virtualbox.org/wiki/Downloads下载并且安装&#xff0c;请选择对应系统的版本进行安装&#xff0c;我是Mac OS。一路Next。 下载CentOS虚拟镜像 到https://www.osboxes.org/centos/下载CentOS的虚拟镜像。我下载的是CentOS 7&#xff0c;64bi…

从零搭建微服务-认证中心(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 技术选型 本微服务将采用 Sa-Token 作为权限…

六级备考24天|CET-6|翻译技巧12|理解背诵|11:00~12:00+14:20~15:30

目录 一、翻译难点 二、评分标准​ 三、六级翻译之词汇 中国特色词汇 除夕 元宵节 上元节/灯节 年夜饭 团圆饭 大扫除/彻底打扫 不畏艰难 砥砺前行 四、六级翻译之语法 &#xff08;一&#xff09;定语从句 使用定语从句的前提 1. 带有动词的“的”结构 2. 相邻句子有名词重复 …

VMware重新安装VMwareTool字体为灰色情况+ubuntu时间设置

文章目录 前言&#xff1a;1. 重新安装VMwareTool字体为灰色2. VMware下ubuntu的时间设置 前言&#xff1a; 之前退出VMware关闭的时候没有等待虚拟机的状态保存&#xff0c;强制关机了。这就导致后面使用的时候&#xff0c;共享目录无法显示情况。对于上面的情况我的博客里面…

无毛刺时钟切换电路

为了SOC设计的低功耗性&#xff0c;多时钟域的划分是常用手段之一&#xff0c;有两个时钟&#xff0c;A为50Mhz&#xff0c;B为100Mhz&#xff0c;请设计无毛刺时钟切换电路&#xff0c;根据控制信号control&#xff0c;输出所需时钟信号。 control信号至少对一个时钟信号为异…

SpringCloud Sleuth+Zipkin

SpringCloud SleuthZipkin 官网 https://github.com/spring-cloud/spring-cloud-sleuth Sleuth/Zipkin 是什么&#xff1f; 概述(两张图) 在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用, 来协同产生最后的请求结果&#x…

WhatsApp如何推动更多销售额

WhatsApp在全球拥有超过2亿用户&#xff0c;已成为最突出的通信应用程序。对于企业来说&#xff0c;这提供了一个有利可图的机会&#xff0c;可以大规模推广他们的产品和服务&#xff0c;而成本可能只是传统营销成本的一小部分。 如果您拥有电子商务业务&#xff0c;WhatsApp可…

《逆商》我们该如何应对坏事件

关于作者 作者保罗史托兹博士是逆商理论的提出者和奠基人&#xff0c;他曾被《人力资源》杂志评为 “全球十大有影响力的思想家”。在二十多年前提出逆商理论之后&#xff0c;他一直在致力于帮助各行各业的人士提高逆商&#xff0c;在实践中积累了该领域大量的数据和经验。 关…

典型环节的仿真实验(自控实验一)

实验目的 1&#xff09;了解MATLAB Simulink的组成&#xff1b; 2&#xff09;掌握线性系统Simulink仿真模型的建立方法&#xff1b; 3&#xff09;通过典型环节阶跃响应的仿真&#xff0c;了解典型环节的动态特性&#xff1b; 4&#xff09;了解MATLAB进行线性系统仿真的相…

2023新版Spring6全新讲解-核心内容之IoC

Spring核心之IoC 一、IoC概念介绍 1.IoC 介绍 IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。…

如何获得铁粉?

铁粉是指那些非常喜欢某个人、品牌、产品或组织的人群&#xff0c;他们对所支持的对象非常忠诚&#xff0c;会在各种场合下宣传、支持和捍卫他们的偶像。铁粉通常会在社交媒体上关注他们的偶像、分享他们的内容、购买他们的产品或服务&#xff0c;并与其他铁粉互动和交流。他们…

JavaScript中的生成器函数(Generator Functions)

简介&#xff1a; 生成器函数&#xff08;Generator Functions&#xff09;是JavaScript中的一种特殊类型函数&#xff0c;它允许开发者在函数内部产生多个值并逐步返回&#xff0c;与传统函数一次返回单个值的方式不同。本文将介绍生成器函数的特性、优缺点以及如何使用它们&a…

【重新定义matlab强大系列十】函数normalize进行归一化数据

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

2. css表格属性、文本属性、列表属性、边距属性、尺寸属性

1. 表格属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width…

每日一题——四数之和(双指针解法)

每日一题 四数之和 注&#xff1a; 如果大家没做过题目两数之和、三数之和&#xff0c;强烈建议先去做做&#xff0c;也可以参考我之前写的博客&#xff0c;这样做这一题会事半功倍&#xff0c;且由于本题思路和三数之和十分类似&#xff0c;故对于解题思路&#xff0c;也不会…

涨点神器:注意力机制---多头上下文集成(Context Aggregation)的广义构建模块,助力小目标检测,暴力涨点

1.数据集性能验证 在crack道路缺陷检测任务中,多头上下文集成(Context Aggregation)的广义构建模块实现暴力涨点mAP50从0.954提升至0.992 🏆🏆🏆🏆🏆🏆Yolov5/Yolov7魔术师🏆🏆🏆🏆🏆🏆 ✨✨✨魔改网络、复现前沿论文,组合优化创新 🚀🚀🚀…

第一章.The Learning Problem

第一章.The Learning Problem 1.1 The Learning Problem 1.机器学习的概念&#xff1a; 机器学习就是机器从数据中总结经验。从数据中找出某种规律或者模型&#xff0c;并用他来解决某种实际问题。 2.机器学习的应用场景 1).事物本身存在某种潜在规律 2).某些问题难以使用普…

海豚调度器完全设置东八区

为了兼容全世界不同时区&#xff0c;默认情况下&#xff0c;海豚调度器使用的是 UTC 0 时区&#xff0c;包括保存到数据库表中的数据时区&#xff0c;以及展示到页面上的时区。 如果我们想在页面上看到东八区时间&#xff0c;则需要在页面上手动选择上海时区&#xff0c;如下图…