Как заставить мой файл Keystore работать с моим проектом Java Vert.x (неверный формат хранилища ключей) - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть проект 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 ver ver.

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)

Я использовал этот каксправка о том, как реализовать 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 или аутентификацией.

ОТВЕТ

Плагин 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 )
    }
}

1 Ответ

0 голосов
/ 20 ноября 2018

Плагин 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 )
    }
}
...