java - 如何使我的Keystore文件与Java Vert.x项目一起使用(无效的Keystore格式)

标签 java gradle jwt keystore vert.x

我有一个Java Vert.x Gradle项目,并且试图使Vert.x auth JWT与之一起工作,但是当我运行我的项目时,出现了Invalid keystore format错误。

我正在尝试在本地执行此操作;我正在使用iMac。

这是我的build.gradle文件的一部分:

build.gradle

// Import to replace ant-style tokens (@environmentVariable@) with values
import org.apache.tools.ant.filters.ReplaceTokens

buildscript {
  ext.vertxVersion = '3.5.4'
}

dependencies {
  compile "io.vertx:vertx-core:$vertxVersion"
  compile "io.vertx:vertx-web:$vertxVersion"
  compile "io.vertx:vertx-web-client:$vertxVersion"
  compile "io.vertx:vertx-web-templ-thymeleaf:3.5.4"
  compile "io.vertx:vertx-unit:$vertxVersion"
  compile 'io.vertx:vertx-auth-jwt:3.5.4'
  compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
  compile "org.slf4j:slf4j-api:1.7.25"
  testCompile group: 'junit', name: 'junit', version: '4.12'
  implementation 'com.google.code.gson:gson:2.8.5'
}

//Replace ant-style tokens with properties.
processResources {
    filter( ReplaceTokens, tokens:  properties )
}

这是我在Vert.x垂直版本中实现的方式。

MainVerticle.java
JWTAuthOptions config = new JWTAuthOptions();
config.setKeyStore(new KeyStoreOptions()
        .setType(Constants.KEY_STORE_TYPE) /* = "jceks" */
        .setPath(Constants.KEY_STORE_PATH) /* = "keystore.jceks" */
        .setPassword(Constants.AUTH_KEY_STORE_PASSWORD)); /* correct password */

JWTAuth provider = JWTAuth.create(vertx, config);

router.route(Constants.HOME_PAGE + "/*").handler(JWTAuthHandler.create(provider));

这是我保留keystore.jceks文件的位置:

keystore.jceks
My-Project
  |----src
        |----main
              |----resources
                      |----keystore.jceks

我首先用gradle构建我的项目:
$ ./gradlew clean build

构建我的项目效果很好。然后,我尝试运行我的项目:
$ java -jar build/libs/MyProject-far-1.0.jar

运行项目时,出现以下错误:
java.lang.RuntimeException: java.io.IOException: Invalid keystore format
at io.vertx.ext.auth.jwt.impl.JWTAuthProviderImpl.<init>(JWTAuthProviderImpl.java:107)
at io.vertx.ext.auth.jwt.JWTAuth.create(JWTAuth.java:56)
at com.ucg.warehouselocationmapping.app.MainVerticle.start(MainVerticle.java:54)
at io.vertx.core.impl.DeploymentManager.lambda$doDeploy$8(DeploymentManager.java:491)
at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:339)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)

我使用this作为如何实现Vert.x auth JWT以及其他项目代码的引用。

我正在使用的keystore.jceks文件是从另一个工作正常的项目中复制的。它首先是通过在Eclipse周围拖动来复制的。如果不起作用,我尝试在终端中复制它:
$ cp /Users/Me/workspace/My-Service/src/main/resources/keystore.jceks /Users/Me/workspace/My-Project/src/main/resources

那没有用,所以我尝试通过Finder复制它。那也不起作用。

有人遇到过这个问题吗?我不太熟悉jks / jceks文件或身份验证。

回答

当我真的只想在属性文件中替换 Ant 风格的 token 时,import org.apache.tools.ant.filters.ReplaceTokens插件在我的keystore.jceks文件中找到@符号并对其进行操作。我将build.gradle文件更新为仅替换以.properties结尾的文件,从而解决了我的问题。
//Replace ant-style tokens with properties.
processResources {
    filesMatching('**/*.properties') {
        filter( ReplaceTokens, tokens:  properties )
    }
}

最佳答案

当我真的只想在属性文件中替换 Ant 风格标记时,import org.apache.tools.ant.filters.ReplaceTokens插件在我的keystore.jceks文件中找到@符号并对其进行操作。我更新了build.gradle文件,仅替换了以.properties结尾的文件,从而解决了我的问题。

//Replace ant-style tokens with properties.
processResources {
    filesMatching('**/*.properties') {
        filter( ReplaceTokens, tokens:  properties )
    }
}

关于java - 如何使我的Keystore文件与Java Vert.x项目一起使用(无效的Keystore格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53382680/

相关文章:

oauth-2.0 - 如何使用 Google Auth JWT 授权登录用户? (图片)

java - Android Studio 3.6.3 不生成所有 BE 常量

java - 如何以编程方式停止 RMI 服务器并通知所有客户端

java - 将一些获取和设置代码从 C# 转换为 Java

spring-boot - Spring Boot消耗WebService-如何在具有gradle的不同软件包上具有多个xsd和wsdl?

grails - 向Groovy反向工程Mysql模式?

Android Studio 无法编译

spring - spring security JWT 实现是否处理 alg :none attack?

java - 在没有管理员权限的情况下在 Windows 10 和 Cygwin 上安装 Java JDK

Angular2-jwt - AuthHttp,刷新 token ,将它们放在一起