Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java vt.x JWT auth允许禁止访问_Java_Vert.x_Java 11 - Fatal编程技术网

Java vt.x JWT auth允许禁止访问

Java vt.x JWT auth允许禁止访问,java,vert.x,java-11,Java,Vert.x,Java 11,场景 我在http服务器垂直链接的start()中调用此方法: private void setupAuth(Router router) { // Secure access key var config = new JWTAuthOptions() .setKeyStore(new KeyStoreOptions() .setType("jceks") .setPath("C:\\Users\\3587741\\Desktop\\P

场景

我在http服务器垂直链接的
start()
中调用此方法:

private void setupAuth(Router router) {
    // Secure access key
    var config = new JWTAuthOptions()
      .setKeyStore(new KeyStoreOptions()
        .setType("jceks")
        .setPath("C:\\Users\\3587741\\Desktop\\Projects\\P_Gatlin\\jwt\\keystore.jceks")
        .setPassword("secret")
      );

    // Setup the secure route
    authProvider = JWTAuth.create(vertx, config);
    router.route().handler(BodyHandler.create());
    router.route().handler(SessionHandler.create(LocalSessionStore.create(vertx)).setAuthProvider(authProvider));

    // Redirect to a login page if the user is NOT logged
    var redirectAuthHandler = RedirectAuthHandler.create(authProvider, RouteNames.LOGIN_ADMIN, "/");

    // Secure every page that starts with "/admin/..."
    router.route("/admin/*").handler(redirectAuthHandler);
    router.post(RouteNames.LOGIN_CHECKER).handler(FormLoginHandler.create(authProvider));
  }
我需要有
/admin/*
路径才能确保安全。上述实现几乎完全是从官方复制粘贴的。我已使用此行生成密钥:

keytool -genkeypair -keystore keystore.jceks -storetype jceks -storepass secret -keyalg EC -keysize 256 -alias ES512 -keypass secret -sigalg SHA512withECDSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
从上面可以看出,密码是
secret
,别名是
es512
。这是登录页面的内容

  <form action="/login-auth" method="POST">
    <div class="credential">
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />

      <input type="submit" value="OK" />
    </div>
  </form>

其中
/login auth
路由器.post(RouteNames.login\u CHECKER).handler(FormLoginHandler.create(authProvider))中的
路由名称.login\u CHECKER
的值


在我的网页中,我尝试访问
http://localhost/admin/test
我被正确重定向到
/login
页面:

为什么我会收到这个信息

禁止的

当我尝试访问时?别名和密码是正确的,我还使用keytool测试了它们,并且它们匹配(我在生成jceks的命令中使用了它们)。怎么了


我在某种程度上没有使用JWT auth吗?

您在这里混合了两种不兼容的东西

  • FormAuthHandler
    功能是将浏览器重定向到一个HTML页面,在该页面上向最终用户请求登录/密码。这就是你所观察到的
  • JWTHandler
    功能是验证JWT令牌
因此,当浏览器将表单提交到服务器时,它会发送一个表单(带有用户名/密码),而不是JWT令牌。由于令牌丢失,您将获得一个禁止的错误代码