BouncyCastle 在 SpringMVC 中导致扫描超时
BouncyCastle causing scan timeout in SpringMVC
我 运行 在 Jetty 9.2.10.v20150310 中安装 SpringMVC 应用程序没有问题。
但是,一旦我添加了对 BouncyCastle 的依赖项,扫描就会永远进行并且服务器会超时。
我项目中只有一个BouncyCastle依赖
<!-- bouncy castle -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.54</version>
</dependency>
依赖关系树确认:
mvn dependency:tree -Dincludes=org.bouncycastle
产生:
[INFO] Building application-myapp 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------ ------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ application-myapp ---
[INFO] com.my-company:application-myapp:war:1.0.0-SNAPSHOT
[INFO] \- org.bouncycastle:bcpkix-jdk15on:jar:1.54:compile
[INFO] \- org.bouncycastle:bcprov-jdk15on:jar:1.54:compile
[INFO] ------------------------------------------------------------------ ------
[INFO] BUILD SUCCESS
有人看过这个吗?
注意:我也尝试了最新的 Jetty 版本 9.3.10.v20160621,结果相同
当我 运行 使用 -X 的 mvn:jetty 进程时,我看到它陷入了一个长循环扫描 BouncyCastle jar,基本上看到这样的输出大约两分钟:
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA3Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA512Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA512tDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHAKEDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SM3Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/ShortenedDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SkeinDigest.class
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar
我们通过从 jetty-maven-plugin 中删除 bouncycastle jar 来实现这一点。请注意 webInfIncludeJarPattern:
中的 "exclude" bouncycastle 前瞻正则表达式
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration combine.self="override">
. . .
<webApp>
<contextPath>${jetty.context}</contextPath>
<webInfIncludeJarPattern>^((?!bouncycastle).)*$</webInfIncludeJarPattern>
</webApp>
<jettyConfig>${jetty.xml}</jettyConfig>
. . .
我 运行 在 Jetty 9.2.10.v20150310 中安装 SpringMVC 应用程序没有问题。 但是,一旦我添加了对 BouncyCastle 的依赖项,扫描就会永远进行并且服务器会超时。
我项目中只有一个BouncyCastle依赖
<!-- bouncy castle -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.54</version>
</dependency>
依赖关系树确认:
mvn dependency:tree -Dincludes=org.bouncycastle
产生:
[INFO] Building application-myapp 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------ ------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ application-myapp ---
[INFO] com.my-company:application-myapp:war:1.0.0-SNAPSHOT
[INFO] \- org.bouncycastle:bcpkix-jdk15on:jar:1.54:compile
[INFO] \- org.bouncycastle:bcprov-jdk15on:jar:1.54:compile
[INFO] ------------------------------------------------------------------ ------
[INFO] BUILD SUCCESS
有人看过这个吗?
注意:我也尝试了最新的 Jetty 版本 9.3.10.v20160621,结果相同
当我 运行 使用 -X 的 mvn:jetty 进程时,我看到它陷入了一个长循环扫描 BouncyCastle jar,基本上看到这样的输出大约两分钟:
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA3Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA512Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA512tDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHAKEDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SM3Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/ShortenedDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SkeinDigest.class
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar
我们通过从 jetty-maven-plugin 中删除 bouncycastle jar 来实现这一点。请注意 webInfIncludeJarPattern:
中的 "exclude" bouncycastle 前瞻正则表达式<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration combine.self="override">
. . .
<webApp>
<contextPath>${jetty.context}</contextPath>
<webInfIncludeJarPattern>^((?!bouncycastle).)*$</webInfIncludeJarPattern>
</webApp>
<jettyConfig>${jetty.xml}</jettyConfig>
. . .