我有一个关于修改最终公共课程的快速问题。根据一些研究,似乎最终的公共类不能被继承或实现。我的目标是在这个最终的公共类中更改一个最终的静态变量。
类名是:公共最终类Utils
private static final Set<String> DISALLOWED_HEADERS_SET = Set.of(
"authorization", "connection", "cookie", "content-length",
"date", "expect", "from", "host", "origin", "proxy-authorization",
"referer", "user-agent", "upgrade", "via", "warning");
我想摆脱authorization
这个领域DISALLOWED_HEADERS_SET
。有没有办法做到这一点?
我听说反射是修改类的一种方法。这是一个Apress/java-9-revealed to a github,它似乎揭示了类的内容
此线程(问题)已被确定为 XY 问题。我将尝试用更多信息解释为什么我想要解决上述问题。在深入探讨促使我提出这个问题的原因之前,我将介绍一下这个问题目前所处的现状。
重要的是要了解,Clevertap已经向Oracle提出了这个问题。如果您关注 Oracle 链接,您可以看到此问题已被确认并更新为Jdk 11
. 希望 Oracle 将这个固定的源代码应用到即将到来Java 10
的. 话虽这么说,唯一的解决方案是使用clevertap中的开放线程建议的反射。Jdk 9
Java 9
现在,我将简要解释一下我所取得的成就并试图弄清楚。我一直在研究我一直在开发的框架,用于使用 Java 语言向 APNs 发送推送通知。除了一项功能外,一切正常。
[我将在不久的将来通过 GitHub 为那些试图在不依赖第三方框架(例如 Jetty、Netty 或 okhttp)的情况下向 APNs 发送通知的人分享这个框架。]
当我尝试使用令牌作为身份验证方式发送通知时,问题就出现了。我已按照Apple提供的说明成功创建了令牌。我所要做的就是使用authorization
键和bearer <token>
值设置请求标头。但是,当我使用.setHeader
派生自jdk9.incubator.httpclient模块来设置这些值时,它会自动省略该字段。如前所述,authorization
是其中的一部分,DISALLOWED_HEADERS_SET
显然是不允许的。如果用户尝试将“授权”设置为请求头字段的键值,则会将其删除。如果您有任何解决此问题的建议。对于面临同样问题的其他人来说,这将是很棒的和有帮助的。
坏消息伙计们......jdk 9.0.4
删除了setSystemHeader
方法,所以如果你想使用reflection
,你需要使用Jdk 9.0.1
如前所述,我创建了用于使用纯 java 代码发送通知的 java 库并将其推送到github。我使用了基于jdk10
我发布的应用程序的旧版本。旧版本仅支持 tls 连接。现在基于的当前版本jdk11
同时支持 tls 和基于令牌的身份验证,用于向 APNs 发送推送通知。