为什么Spring Security REST插件与JDK 1.6不兼容?

时间:2015-06-15 11:01:50

标签: rest grails dependency-management jwt

根据the official Grails docs,Grails 2.4.2适用于JDK 1.6。就我而言,这意味着我可以在运行JDK 1.6的执行环境中运行所有与Grails 2.4.2一起使用的插件。

但是,当我尝试将Grails应用程序的war文件部署到运行在JDK 1.6上的Glassfish v3.1时,我遇到了与JDK 1.6兼容的依赖项问题:

Caused by: java.lang.UnsupportedClassVersionError: WEB9032: Class   com.nimbusds.jwt.JWT has unsupported major or minor version numbers, which are greater than those found in the Java Runtime Env
ironment version 1.6.0_07
    at       org.glassfish.web.loader.WebappClassLoader.findClass(WebappClassLoader.java:948)
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1485)
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1368)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    at java.lang.Class.getDeclaredMethods(Class.java:1791)
    ... 55 more

运行dependency-report后,我发现问题是由Spring Security REST插件的依赖引起的:

+--- org.grails.plugins:spring-security-rest:1.5.1
|    \--- net.spy:spymemcached:2.11.6
|    \--- com.google.guava:guava-io:r03
|         \--- com.google.guava:guava-annotations:r03
|         \--- com.google.guava:guava-base:r03
|    \--- org.pac4j:pac4j-core:1.6.0
|    \--- org.pac4j:pac4j-oauth:1.6.0
|         \--- org.apache.commons:commons-lang3:3.1
|         \--- org.scribe:scribe:1.3.6
|         \--- com.fasterxml.jackson.core:jackson-databind:2.0.6
|              \--- com.fasterxml.jackson.core:jackson-annotations:2.0.6
|              \--- com.fasterxml.jackson.core:jackson-core:2.0.6
|    \--- com.nimbusds:nimbus-jose-jwt:3.9
|         \--- net.jcip:jcip-annotations:1.0
|         \--- net.minidev:json-smart:1.1.1
|         \--- org.bouncycastle:bcprov-jdk15on:1.51
|         \--- commons-io:commons-io:2.4

导致问题的类com.nimbusds.jwt.JWT是Spring Security REST插件所依赖的工件nimbus-jose-jwt的一部分。

我觉得这个插件应该符合JDK 1.6标准,因为在插件页面上显示 Grails版本:2.0> * 即可。这是非常误导的,因为我花了很长时间开发,现在我意识到我甚至无法将其部署到生产中。不应该说 Grails版本:3.0> * ,或者我在这里误解了什么?

1 个答案:

答案 0 :(得分:2)

我怀疑Nimbus JOSE+JWT(由Spring Security Core插件使用)需要Java 7+的原因是因为较小版本的Java不支持相同的加密。浏览他们的网站,您将看到最低要求:

  

Nimbus JOSE + JWT库需要Java 7+并且很少   的依赖关系。

你的假设只是因为插件支持Grails 2.0+意味着它也支持JDK 1.6只是一个假设,而且显然不正确。不要求Grails插件针对特定的Java兼容级别。

您的开发是在不使用生产环境中使用的Java最低目标版本的情况下完成的,这是真正的罪魁祸首。您应该始终使用目标生产环境的最低要求进行开发和测试。