- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试构建一个 JAVA 客户端以 POST 到 RESTApi,但是,在这样做时我收到错误“用户未经过身份验证”。
在查看 API 服务文档时,我发现我必须先获取身份验证 token ,然后才能像步骤 1 中所述那样调用 API,然后在对 API 的任何后续调用中使用该 token 。
文档是这样说的:
1)
sessionToken=$(curl -s -X POST -d '{"userName":"NAME", "password": "xxxxx"}' https://host:18641/security/public-rest/v1/authentication/login -H "Content-Type:application/json" -H "X-Requested-By:SDC" -c - | grep SSO | grep -o '\S*$')
2)
curl -X POST https://host:18641/jobrunner/rest/v1/job/681c449d-7c22-48d6-9532-2e6ef74971bc/start --header "Content-Type:application/json" --header "X-Requested-By:SDC" --header "X-SS-REST-CALL:true" --header "X-SS-User-Auth-Token:$sessionToken" -i
现在,我无法在 JAVA 中实现相同的目标。
我正在使用 Jersey 库,这是我到目前为止的代码,
public static String testUploadService(String httpURL, File filePath,String User,String Pass,Processing processing) throws Exception {
// Thread.sleep(500);
// local variables
ClientConfig clientConfig = null;
Client client = null;
WebTarget webTarget = null;
Invocation.Builder invocationBuilder = null;
Response response = null;
FileDataBodyPart fileDataBodyPart = null;
FormDataMultiPart formDataMultiPart = null;
int responseCode;
String responseMessageFromServer = null;
String responseString = null;
String name = User;
String password = Pass;
String authString = name + ":" + password;
String sdc="sdc";
byte[] encoding = Base64.getEncoder().encode(authString.getBytes());
byte[] encoding2 = Base64.getEncoder().encode(sdc.getBytes());
String USER_PASS = new String(encoding);
String auth2=new String(encoding2);
String boundary = "=-=" + System.currentTimeMillis() + "=-=";
// Thread.sleep(500);
try{
// invoke service after setting necessary parameters
ClientConfig cc = new ClientConfig();
cc.register(MultiPartFeature.class);
try {
client = new JerseywithSSL().initClient(cc);
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
webTarget = client.target(httpURL);
// set file upload values
fileDataBodyPart = new FileDataBodyPart("file", filePath, MediaType.APPLICATION_OCTET_STREAM_TYPE);
formDataMultiPart = new FormDataMultiPart();
formDataMultiPart.bodyPart(fileDataBodyPart);
invocationBuilder = webTarget.request();//.header("Authorization", "Basic " + authString);
invocationBuilder.header("Authorization", "Basic " + USER_PASS);
invocationBuilder.header("X-Requested-By","SDC");
invocationBuilder.header("Content-type", "multipart/form-data; boundary=" + boundary);
try{response = invocationBuilder.post(Entity.entity(formDataMultiPart, MediaType.MULTIPART_FORM_DATA));}
catch(Exception ex){
ex.printStackTrace();
}
responseCode = response.getStatus();
System.out.println("Response code: " + responseCode);
if (response.getStatus() != 200) {
// throw new RuntimeException("Failed with HTTP error code : " + responseCode);
}
System.out.println("Check 6");
// get response message
responseMessageFromServer =
response.getStatusInfo().getReasonPhrase();
System.out.println("ResponseMessageFromServer: " +
responseMessageFromServer);
System.out.println("Check 7");
processing.setlabel("Finished");
processing.setprogress(100);
// get response string
responseString = response.readEntity(String.class);
processing.finished("Server Response Code - "+responseCode + "\n ResponseMessageFromServer: "+ responseString);
}
catch(Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Error!! \n Make sure you are connected to Dell Internal Network");
processing.dispose();
}
finally{
// release resources, if any
fileDataBodyPart.cleanup();
formDataMultiPart.cleanup();
formDataMultiPart.close();
response.close();
client.close();
}
return responseString;
}
我需要像第一个 Curl 命令中那样获取身份验证 token 方面的帮助,我可以创建第二个 Post 命令。
最佳答案
解析您的响应 header 并获取身份验证 token 。查看您共享的代码的第 192 行
String userAuthToken = response.getHeaderString(SSOConstants.X_USER_AUTH_TOKEN);
并在调用其他 Web 服务时在请求 header 中使用此 userAuthToken
。您可以将此 AuthToken 存储在 Activity session 中。检查第 206 行
.header(SSOConstants.X_USER_AUTH_TOKEN, userAuthToken)
获取Auth Token的关键是
String X_USER_AUTH_TOKEN = "X-SS-User-Auth-Token";
关于java - 如何从 StreamSets Control Hub API 请求身份验证 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50249817/
这是 Controller 方法,它接收应该被踢出的userName。 public ActionResult Kick(string userName) { var h
ASP.NET SignalR Hubs API 指南 - 服务器 ( https://learn.microsoft.com/en-us/aspnet/signalr/overview/guide-
我知道程序以及如何从 GitHub 或 BitBucket 配置自动化 docker hub。 但是我现在要做的是创建两个名为 Test/main 的 docker hub 存储库。和 Test/de
这是场景: Device1同时发送两条iothub D2C消息: 这会将标志设置为 true 这会将标志设置为 false 物联网消息路由将消息路由到 eventhub,这将触发 EventHubTr
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是 selenium 的新手,我一直在尝试启动 Selenium Hub 并使用 java 将节点添加到 Hub。我已使用命令提示符启动它,但我希望它自行发生。我能够启动 Hub,但不知道如何添加节
我正在使用 SignalR 项目,我想在 WebApi 项目和 Web 项目中使用 Hub。所以我创建了一个类库项目并在那里实现了 Hub。 我的项目结构如下: -ChatHub -Hub -We
在开始之前,我想提一下,这并不完全是重复的,其他类似的问题对我的情况没有任何有用的答案。 在我的 ASP.Net Core 2.1 中,我有一个可以使用 AJAX 调用的操作(它的名称是 Create
我得到以下堆栈跟踪: { “状态”:13 “值(value)”: { “class”:“java.lang.NullPointerException”, “堆栈跟踪”: [ { “fileName”:
这是我当前的设置: 从 Bitbucket 获取存储库 使用 Amazon Linux 2 AWS 托管镜像构建 docker 镜像 将图像推送到 ECR 我现在有时会在 docker 构建阶段收到
我开发了一个 PDF Converter / Viewer for Windows Phone 7 , 但除非它可以从某处获取源文件(Word、Excel、PowerPoint 等),否则它毫无用处。
在 ASP.Net MVC 5 项目的根目录中创建 SignalR 2 Hub 类工作得很好。您可以访问 ~/signalr/hubs url 并返回代理。您还可以将该类放在名为 Hubs 或类似名称
我正在从我的工作站测试 ML DHF Quickstart Hub,并且可以很好地连接到 MarkLogic 的本地实例。但是当我创建一个新的环境 gradle-DEV.properties 文件并尝
我想监视来 self 的应用程序的一些事件。 一种选择是将数据发送到 Azure 事件中心并使用流分析进行一些后处理并将数据输入到 cosmos db 中。 另一个选项是从应用程序存储到 cosmos
我想监视来 self 的应用程序的一些事件。 一种选择是将数据发送到 Azure 事件中心并使用流分析进行一些后处理并将数据输入到 cosmos db 中。 另一个选项是从应用程序存储到 cosmos
(我是 Signalr 新手) 我正在开发一个 Web 应用程序,它使用 Signalr-core 来实时更新页面。 我遇到的问题是,当我运行多个客户端时,我正在运行的方法将同时运行与客户端数量一样多
我是 SignalR 库的新手。我在 VS2010 中创建了一个新的 Web 项目,然后在包管理器控制台中我执行了以下命令来设置 SignalR 包。 PM> Install-Package Micr
我将我的Docker镜像标记为foo/foo:latest 当只有一张图片时,可以做docker push 但是由于我总是将它们标记为foo/foo:latest,所以我想知道是否可以上传不是最新生成
我有一个容器,我想对其进行更改。 它托管在docker hub上,我想更改其命令之一以安装其他应用程序。 我可以在docker hub中看到各个步骤,但不能看到dockerfile本身(不确定原因)。
我正在尝试找到一种方法,可以在短时间内将100幅图像推送到Docker集线器。有没有更好,更有效的方法来做到这一点? alpine:1.0.0.0 alpine:2.0.0.0 . .. ... al
我是一名优秀的程序员,十分优秀!