JVM 的 JSON Web 令牌支持是不是包括 impl、api 和 jackson?
Posted
技术标签:
【中文标题】JVM 的 JSON Web 令牌支持是不是包括 impl、api 和 jackson?【英文标题】:JSON Web Token Support For The JVM does include impl, api and jackson?JVM 的 JSON Web 令牌支持是否包括 impl、api 和 jackson? 【发布时间】:2021-05-02 04:09:23 【问题描述】:我需要在 java 中使用依赖项 JWT 来在我的 Java 应用程序中进行安全令牌身份验证。 我的问题是。我是否需要单独使用所有 3 个依赖项:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.0</version>
<scope>runtime</scope>
</dependency>
或者我可以使用一个包含所有这些的单个:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
以及为什么我需要在运行时指定范围
请注意,上面的依赖声明都只有一个编译时依赖,其余的都被声明为运行时依赖。
这是因为 JJWT 的设计使您只依赖于明确设计供您在应用程序中使用的 API,而所有其他内部实现细节(可以在没有警告的情况下更改)被归为仅运行时依赖项。如果您想确保 JJWT 的稳定使用和随着时间的推移进行升级,这一点非常重要:
JJWT 保证其所有工件的语义版本控制兼容性,
jjwt-impl
.jar 除外。对jjwt-impl
.jar 没有此类保证,并且该.jar 中的内部更改可能随时发生。切勿使用compile
范围将jjwt-impl
.jar 添加到您的项目中 - 始终使用runtime
范围声明它。
Understanding JJWT Dependencies
【问题讨论】:
【参考方案1】:在 JJWT 版本 0.10.0 之前,io.jsonwebtoken:jjwt-api
和 io.jsonwebtoken:jjwt-impl
都被打包为单个工件 io.jsonwebtoken:jjwt
。
随着 JJWT 版本 0.10.0 的发布,这些已分为两个不同的工件。
来自JJWT Release Notes, version 0.10.0:的发行说明
向后兼容性通知:
JJWT 的新模块化设计利用了 compile 和 运行时依赖项,以确保您只依赖于公共 API 在您的应用程序中使用是安全的。所有内部/私人 实现类已移至新的 jjwt-impl 运行时 依赖。
如果您过去依赖于任何内部实现类, 你有两个选择:
重构您的代码以使用仅限公共的 API 类和接口 在 jjwt-api .jar 中。您可能在 内部实现应该可以通过更新的清洁器获得 该 .jar 中的接口和帮助程序类。
指定新的 jjwt-impl .jar 不是作为运行时依赖项,而是作为 编译依赖。这将使您完全升级到 JJWT 0.10.0 向后兼容,但您需要自担风险。 JJWT 将使 jjwt-impl .jar 中没有语义版本兼容性保证 向前进。语义版本控制将非常小心地遵守 然而,在所有其他 JJWT 依赖项中。
【讨论】:
以上是关于JVM 的 JSON Web 令牌支持是不是包括 impl、api 和 jackson?的主要内容,如果未能解决你的问题,请参考以下文章
我是不是需要使用快速会话以及护照和 JSON Web 令牌进行身份验证?