【问题标题】:vertx authentication and session managementvertx 身份验证和会话管理
【发布时间】:2015-08-14 06:04:34
【问题描述】:

我在后端使用 Vert.x,在前端使用 AngularJS。

Vert.x 服务器使用 POST 和 GET 方法接收 HTTP 操作。不知何故,我为每个请求获得了不同的会话 ID。

以下是我的 LoginFormHandler 类句柄例程中的代码 sn-p。

authProvider.authenticate(authInfo, res -> {
  if (res.succeeded()) {
    Session session = context.session();
    io.vertx.ext.auth.User user = res.result();
    session.put("user", user);
    req.response().setStatusCode(204).end("user Login success");
    //...
  }
//...
}

我将用户对象放在当前会话中。然后我移动到新页面并向 Vert.x 服务器发送一个 POST 请求。在那个 POST 处理程序中,我正在尝试获取会话对象:

Session session = context.session();
io.vertx.ext.auth.User user = session.get("user");

我没有得到用户。此外,当我打印会话 ID 时,两个会话的值都不同。

我在线程的启动例程中有以下代码。

router.route().handler(CookieHandler.create());
router.route().handler(
                SessionHandler.create(LocalSessionStore.create(vertx)));
AuthProvider ap = new MyAuthProvier();
router.route().handler(UserSessionHandler.create(ap));
AuthHandler basicAuthHandler = BasicAuthHandler.create(ap);
router.route("/Services/rest/user/auth").handler(MyFormLoginHandler.create(ap));
router.route("/Services/*").handler(basicAuthHandler);

【问题讨论】:

  • “我没有得到用户。”到底是什么意思。你得到一个null 对象吗?

标签: session session-management vert.x


【解决方案1】:

尝试使用新的处理程序进行身份验证。

router.route("/Services/rest/user/auth").handler(new MyFormLoginHandler());
router.route("/Services/*").handler(basicAuthHandler);

如下实现处理程序

class MyFormLoginHandler implements Handler<RoutingContext> {
public void handle(RoutingContext routingContext) {

    HttpServerResponse response = routingContext.response();
    Session session = routingContext.session();

    routingContext.request().bodyHandler(new Handler<Buffer>() {
        public void handle(Buffer buf)
        {
            ....
            for (User u : users){
               if (u.getPassword().equals(passwd)){
                  session.put("user", u.getUserName());
                  response.setStatusCode(204).end("User Authenticated");
                  break;
               }
            }
        };
    });
}

}

从会话中访问用户。

class TestRequest implements Handler<RoutingContext> {
    public void handle(RoutingContext routingContext) {
        Session session = routingContext.session();
        routingContext.request().bodyHandler(new Handler<Buffer>() {
            public void handle(Buffer buf) {
                .....
                    String userName = session.get("user");
                .....
            };
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多