我在后端使用 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);
答案 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");
.....
};
});
}
}