许多REST服务会将cookie用作身份验证/授权方案的一部分。 这是一个问题,因为默认情况下,旧的Jersey客户端将使用单例CookieHandler.getDefault ,大多数情况下,该示例将为null,如果不为null,则在多线程服务器环境中不太可能工作。 (这是因为默认情况下,默认的Jersey客户端将使用URL.openConnection)。

现在,您可以使用针对Jersey的Apache HTTP客户端适配器来解决此问题; 但这并不总是可用。 因此,如果您想在服务器环境中将Jersey客户端与cookie一起使用,则需要做一些反思,以确保您使用自己的私有cookie jar。

final CookieHandler ch = new CookieManager();Client client = new Client(new URLConnectionClientHandler(new HttpURLConnectionFactory() {@Overridepublic HttpURLConnection getHttpURLConnection(URL uRL) throws IOException {HttpURLConnection connect = (HttpURLConnection) uRL.openConnection();try {Field cookieField = connect.getClass().getDeclaredField("cookieHandler");cookieField.setAccessible(true);MethodHandle mh = MethodHandles.lookup().unreflectSetter(cookieField);mh.bindTo(connect).invoke(ch);} catch (Throwable e) {e.printStackTrace();}return connect;}}));

仅当您的环境使用JDK随附的sun.net.www.protocol.http.HttpURLConnection的内部实现时,此方法才有效。 对于WLS的现代版本,情况似乎如此。

对于JAX-RS 2.0,可以使用Jersey 2.x特定的ClientConfig类和HttpUrlConnectorProvider进行类似的更改。

final CookieHandler ch = new CookieManager();Client client =ClientBuilder.newClient(new ClientConfig().connectorProvider(new HttpUrlConnectorProvider().connectionFactory(new HttpUrlConnectorProvider.ConnectionFactory() {@Overridepublic HttpURLConnection getConnection(URL uRL) throws IOException {HttpURLConnection connect = (HttpURLConnection) uRL.openConnection();try {Field cookieField = connect.getClass().getDeclaredField("cookieHandler");cookieField.setAccessible(true);MethodHandle mh = MethodHandles.lookup().unreflectSetter(cookieField);mh.bindTo(connect).invoke(ch);} catch (Throwable e) {e.printStackTrace();}return connect;}})));

2015年2月11日更新:在某些情况下,尤其是使用https,我看到HttpURLConnection封装在另一个类中,要解决此问题,只需使用反射即可访问委托字段的值。 我已经更新了代码示例以反映此问题。

翻译自: https://www.javacodegeeks.com/2015/02/per-client-cookie-handling-jersey.html

每个客户使用Jersey处理的Cookie相关推荐

  1. jersey客户端_每个客户使用Jersey处理的Cookie

    jersey客户端 许多REST服务会将cookie用作身份验证/授权方案的一部分. 这是一个问题,因为默认情况下,旧的Jersey客户端将使用单例CookieHandler.getDefault , ...

  2. 前端页面——Cookie与Session有什么区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  3. cookie、session以及token的定义、区别、使用环境

    Cookie Cookie 的工作原理 由于 HTTP 是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证,这样 ...

  4. 关于cookie的文章(cookie与session机制)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  5. session和cookie的区别和联系---转载

    区别 1.存放位置: session保存在服务器,cookie保存在客户端 2.存放的形式: session是以对象的形式保存在服务器,cookie以字符串的形式保存在客户端 3.用途: sessio ...

  6. ASP.Net Cookie(几个不同出处)

    Cookie的用法也和ASP中差不多.比如我们建立一个名为aspcn,值为飞刀的cookie HttpCookie cookie = new HttpCookie["aspcn"] ...

  7. python3爬虫实例代码-Python3爬虫带上cookie的实例代码

    Cookie的英文原意是"点心",它是在客户端访问Web服务器时,服务器在客户端硬盘上存放的信息,好像是服务器发送给客户的"点心".服务器可以根据Cookie来 ...

  8. Cookie/Session机制详解--如何区分不同用户

    转载自:https://www.cnblogs.com/zhouhbing/p/4204132.ht 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是C ...

  9. Cookie与Session的区别

    本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对自己的开发工作中灵活运用带来启示. cookie机制 ...

最新文章

  1. 推荐3款 Docker 认证的实用免费插件,帮助您快速构建云原生应用程序!
  2. filecoin白皮书_Filecoin收益知多少?
  3. 手游项目初期的一些想法
  4. C语言1013山东理工大学试题,山东理工大学史上最全C语言PPTC程序设计(2基本数据与运算).ppt...
  5. LabelSmooth
  6. 使用Cisco思科模拟器进行三层交换机配置
  7. Redis 入门指南三:数据类型
  8. WebLogic安装教程
  9. 智慧路灯控制系统解决方案
  10. 加拿大计算机硕士留学移民,加拿大硕士留学移民深度解析,纯干货
  11. 尚学堂视频笔记四:常用类
  12. 世界金融发展史:从资产证券化到STO
  13. Android基于Facebook Rebound的动画效果框架Backboard demo (非常炫酷)
  14. 不规格图片等比例展示---上下/左右留白
  15. HTML设计的步骤,网页设计详细操作步骤
  16. 腾讯云服务器如何重装系统
  17. 人工智能、深度学习、机器学习常见面试题71~82
  18. 六个计算机硬件商标名称,10nm显卡可能有名字了,Intel悄悄申请全新商标!
  19. 《调色师手册:电影和视频调色专业技法(第2版)》——第2章 调色工作的环境设定 基于监视器的色彩管理...
  20. 选择关键词:SEM助力活动推广

热门文章

  1. oracle基本笔记整理及案例分析2
  2. Gradle 简单使用
  3. SpringSecurity授权(访问控制)
  4. 稀疏数组与二维数组相互转化
  5. (转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别
  6. java编译器API——使用编译工具
  7. Spring 拦截器和过滤器中自动注入为 null 的原因及解决方案
  8. 静态资源Css基础语法
  9. java插入排序_Java程序要插入排序
  10. apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)