gpt4 book ai didi

java - 如何从 StreamSets Control Hub API 请求身份验证 token ?

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:01 27 4
gpt4 key购买 nike

我正在尝试构建一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com