Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Vertx JWTAuth实例缓存_Jwt_Vert.x - Fatal编程技术网

Vertx JWTAuth实例缓存

Vertx JWTAuth实例缓存,jwt,vert.x,Jwt,Vert.x,在Vert.x文档中,我看到您可以获取JWTAuth对象的实例并在处理程序中使用它。我不确定是否可以将对对象的引用存储在静态变量或实例变量中,以便稍后使用它为多个请求创建新标记。我计划创建一个类来管理JWT令牌身份验证,并在构造函数上获取对JWTAuth对象的引用。然后,在处理程序调用的方法上,使用实例变量中存储的引用来创建令牌。这样行吗?或者API设计为在每次需要时调用JWTAuth.create()以获得最佳效果 比如说, Util类 public class AuthenticationU

在Vert.x文档中,我看到您可以获取JWTAuth对象的实例并在处理程序中使用它。我不确定是否可以将对对象的引用存储在静态变量或实例变量中,以便稍后使用它为多个请求创建新标记。我计划创建一个类来管理JWT令牌身份验证,并在构造函数上获取对JWTAuth对象的引用。然后,在处理程序调用的方法上,使用实例变量中存储的引用来创建令牌。这样行吗?或者API设计为在每次需要时调用JWTAuth.create()以获得最佳效果

比如说,

Util类

public class AuthenticationUtil {
   private JWTAuth auth;

   public AuthenticationUtil(Vertx vertx) {
      JsonObject authConfig = new JsonObject().put("keyStore", new JsonObject()
          .put("type", "jceks")
          .put("path", "keystore.jceks")
          .put("password", "secret"));

      auth = JWTAuth.create(vertx, authConfig);
   }

   public void getToken(RoutingContext context) {
       if (validateCredentials(context.request().getParam("username"), context.request().getParam("password"))) {
           context.response().end(auth.generateToken(new JsonObject(), new JWTOptions()));
       } else {
           context.fail(401);
       }
   }

   public Handler<RoutingContext> createAuthHandler() {
       return JWTAuthHandler.create(auth);
   }
   ...
}
公共类AuthenticationUtil{
私有JWTAuth-auth;
公共身份验证工具(Vertx Vertx){
JsonObject authConfig=new JsonObject().put(“密钥库”,new JsonObject())
.put(“类型”、“jceks”)
.put(“路径”、“keystore.jceks”)
.put(“密码”、“机密”);
auth=JWTAuth.create(vertx,authConfig);
}
public void getToken(路由上下文){
if(validateCredentials(context.request().getParam(“用户名”)、context.request().getParam(“密码”)){
context.response().end(auth.generateToken(新的JsonObject(),新的JWTOptions());
}否则{
失败(401);
}
}
公共处理程序createAuthHandler(){
返回JWTAuthHandler.create(auth);
}
...
}
服务器垂直

@Override
public void start(Future<Void> future) {
    AuthenticationUtil authUtil = new AuthenticationUtil(vertx);
    ...
    router.post("/auth").blockingHandler(authUtil::getToken);
    router.get("/someProtectedResource1").handler(authUtil.createAuthHandler());
    router.get("/someProtectedResource2").handler(authUtil.createAuthHandler());
    ...
}
@覆盖
公共无效启动(未来){
AuthenticationUtil authUtil=新的AuthenticationUtil(vertx);
...
router.post(“/auth”).blockingHandler(authUtil::getToken);
router.get(“/someProtectedResource1”).handler(authUtil.createAuthHandler());
router.get(“/someProtectedResource2”).handler(authUtil.createAuthHandler());
...
}

如果我创建了许多服务器垂直链接,并希望为所有这些链接共享同一个AuthenticationUtil实例,该怎么办?

共享一个JWTAuth实例是安全的。在对象初始化和同步非线程安全加密调用之后,实现不会改变任何状态。
但是,如果您可以花费少量的额外内存,那么您应该为每个垂直链接创建一个实例,以避免同步。

一种方法可以是:将
AuthenticationUtil
东西制作为垂直链接(或“工作垂直链接”),您只需处理异步处理内容。@uı,我本来打算把它做成竖直的,但我对它们的工作原理有些怀疑。我问了另一个问题,现在我想我能做到。