【问题标题】:Qt : Accessing Secure Objects using session-id from a serverQt:使用来自服务器的会话 ID 访问安全对象
【发布时间】:2015-06-21 12:49:30
【问题描述】:

我正在开发一个 Qt 应用程序,我想在其中检索在基于 Spring-MVC 的 Web 应用程序中标记为 @Secured 的对象。我已经在服务器端编写了用于 REST 身份验证的代码,如果我使用“curl”工具,那么我就可以访问服务器上的安全服务。我想知道是否可以复制我在 QT 应用程序中访问安全服务的方式。你能帮忙的话,我会很高兴。非常感谢。

卷曲代码:

curl -i -X POST -d j_username=email@email.de -d j_password=password -c /home/username/cookies.txt http://localhost:8080/j_spring_security_check 

为了使用 session-id 访问安全服务,我这样做了:

curl -i --header "Accept:application/json" -X GET -b /home/cookies.txt http://localhost:8080/secure_service_method

如何在 QT 中实现相同的目标。你能帮忙的话,我会很高兴。请注意,我不是 Qt 专家,所以请耐心等待。非常感谢。

【问题讨论】:

  • CURL 有一个C API curl.haxx.se/libcurl/c (libcurl)
  • @Galik 但我正在寻找 Cpp 中的东西,而不是 C 中的东西。我不知道是否可以这样使用,抱歉,我不太了解。你能给我一些使用 curl 从服务器获取方法的示例吗?
  • 从您的 curl 命令来看,您可能只需要发送一个POST request using Qt。查看stackoverflow.com/questions/2599423/…,使用 Wireshark 找出您的 POST 请求的外观,并使用 Qt 构建相同的请求。
  • @m.s. :感谢您提供这些链接,我一定会尝试一下,只有一件事,当我从 curl 收到回复时,cookie 文件看起来像这个链接,pastebin.com/a9dug4CB。唯一有趣的数据是 session-id,它我将需要后续请求,如何在 QT 中对其进行排序以仅获取会话 ID。非常感谢。 :-)

标签: c++ spring qt curl


【解决方案1】:

将我的 cmets 转换为这个答案:

从您的 curl 命令来看,您可能只需要发送一个 POST 请求并使用 Qt 处理 cookie。 Qt 提供了完成这项任务所需的一切,请查看QNetworkAccessManager::postQNetworkAccessManager::setCookieJar

您需要实施的基本步骤如下所示:

1.) 设置:

QNetworkAccessManager* manager = new QNetworkAccessManager(this);
manager->setCookieJar(new QNetworkCookieJar(manager));
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));

2.) 请求 cookie

QNetworkRequest request;
request.setUrl(QUrl("http://localhost:8080/j_spring_security_check"));
QByteArray postData;
postData.append("j_username=email@email.de&j_password=password");
manager->post(request,postData);

3.) 使用 manager 对象,然后该对象具有 cookie 来请求受保护的文件。

【讨论】:

  • 非常感谢。我已经完成了上面的大部分工作,我只需要使用 postData.append 并使用管理器部分。祝您有美好的一天。
  • 朋友您好,我在发送数据时发现一个问题,用户名是空白的。你能告诉我为什么会发生这种情况吗?非常感谢。
  • @WeareBorg:您可能需要将用户名urlencode 改为email%40email.de;请求在 Wireshark 中是什么样子的?
  • 我不知道如何使用wireshark,我已经发布了一个新问题,你可以看看。非常感谢。问题链接:stackoverflow.com/questions/29668696/…
猜你喜欢
  • 2010-10-27
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 2016-06-06
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多