JSON Web令牌支持JVM包括impl, api和jackson?



我需要在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作用域声明它。

理解JJWT依赖

在JJWT 0.10.0版本之前,io.jsonwebtoken:jjwt-apiio.jsonwebtoken:jjwt-impl都被打包为单个工件io.jsonwebtoken:jjwt

在JJWT 0.10.0版本中,这些工件被分成两个不同的工件。

来自JJWT发行说明,版本0.10.0:

注意:向后兼容性

JJWT新的模块化设计利用了编译和运行时依赖项,以确保您只依赖于公共api在应用程序中使用是安全的。所有内部/私实现类已经移动到新的jjwt-impl运行时依赖。如果您过去依赖于任何内部实现类,您有两个选择:

重构你的代码以使用只公开的API类和接口在jjwt-api .jar中。中可能使用的任何功能内部实现应该可以通过更新的cleaner获得.jar中的接口和helper类

指定新的jjwt-impl .jar不是作为运行时依赖项,而是作为编译依赖。这将使您完全升级到JJWT 0.10.0向后兼容,但您需要自担风险。JJWT将做出在jjwt-impl .jar中没有语义版本兼容性保证前进。语义版本控制将非常谨慎地遵守在所有其他JJWT依赖项中。

最新更新