vertx身份验证和会话管理

时间:2015-08-14 06:04:35

标签: session session-management vert.x

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

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

以下是我的LoginFormHandler类句柄例程的代码片段。

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);

1 个答案:

答案 0 :(得分:0)

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

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");
                .....
            };
        });
    }
}