我需要从Java代码中调用REST调用。
我有以下形式的证书
提供的算法
>
获取服务器时间
使用Id、安全密钥
现在授权在下面的表格
"Authorization": "name id=Id, serverTime=serverTime, securitytoken=securitytoken"
需要一个java客户端程序使用上述授权标头调用此REST调用。
我正在得到
HTTP响应401错误。
请提供在请求表单中设置授权标头的正确方法
Name Id="Id",serverTime="2017-11-18T05:51:05",securityToken="TOKEN"
代码:
package com.rest.client;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Sample {
public final static String GATEWAY_ID = "Id";
public final static String KEY = "Key";
public static void main(String[] args) {
try {
HttpURLConnection conn;
conn = (HttpURLConnection) new URL("https://domain/A/B/72968").openConnection();
String serverTime = "2017-11-18T10:51:05";
String securityToken = "TOKEN";
String authorization = "Name Id=\"" + GATEWAY_ID + "\",serverTime=\"" + serverTime + "\",securityToken=\""
+ securityToken + "\"";
// Name Id="Id",serverTime="2017-11-18T10:51:05",securityToken="TOKEN"
conn.addRequestProperty("Authorization", authorization); // Is Header set is correct? It should be part of Request Header. Please correct this
int status = conn.getResponseCode();
System.out.println(status);
BufferedReader br = null;
StringBuilder body = null;
String line = "";
br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
body = new StringBuilder();
while ((line = br.readLine()) != null) {
body.append(line);
}
System.out.println(body);
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
错误:
sun.net.www.protocol.http.IOException:服务器返回HTTP响应代码: 401 URL: https://domain/A/B/72968在onnection.getNativeConstructorAccessorIonnection.java:1920Instance0(本机方法)在sun.net.www.protocol.http.NativeConstructorAccessorIonnection.get实例(NativeConstructorAccessorIonnection.java:1490)在sun.net.www.protocol.http.委托构造访问onnection.get实例(委托构造访问onnection.java:1474)在sun.net.www.protocol.https.Cmpl.get实例(Constructor.java:423)在sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1926)在sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1921)在java.security.AccessController.do特权(本机方法)在java.io.HttpURLCsun.reflect.ChainedException(HttpURLCmpl.new)在sun.reflect.HttpURLCmpl.newInputStream0(HttpURLCmpl.java:62)在sun.reflect.HttpURLCmpl.newInputStream(HttpURLCmpl.java:45)在java.lang.reflect.HttpsURLConnectionIonstructor.newInputStream(HttpsURLConnectionIApplication. main(Application. java: 38)
尝试用这种方式格式化授权字符串“Basic Base64”
。尝试
authorization ="Basic "+new String(new Base64().encode(authorization.getBytes()));
conn.setRequestProperty("Authorization", authorization);
一段时间以来,我一直在撞墙,试图使用注释在JavaEE7 REST应用程序上启用身份验证/授权。无论我多么努力,我都会收到这个错误: 经过一些谷歌搜索,我发现人们建议删除文件夹,但这没有效果。我还将日志记录级别设置为FINE,它提供了这个相关的日志条目: 除此之外: 到目前为止,我只尝试在一个入口点实现它,代码就是这样的。首先,我声明角色“users”(与glassfish服务器上的组名相同),然
事情是运行Rest服务从任何客户端像邮递员,我需要先登录到我的应用程序在浏览器和登录后Rest调用将在RESTClient工作(火狐)。但是万一Jmetm怎么跑呢。我已经添加了授权。(用户名和密码)使用HTTP授权管理器仍然面临。甚至我还添加了bean外壳脚本: 仍然没有跑步Rest。将错误作为错误凭据提供。 有人请指引我。
问题内容: 有了JSR 311及其实现,我们有了一个强大的标准,可以通过REST公开Java对象。但是,在客户端,似乎缺少与SOAP的Apache Axis类似的东西-隐藏了Web服务并将数据透明地封送回Java对象的东西。 您如何创建Java RESTful客户端?使用HTTPConnection和手动解析结果?还是专业客户(例如Jersey或Apache CXR)? 问题答案: 这是一个古老的
假设我有2个微服务A和B。现在对于服务A上的特定请求,A需要对B进行多个相同API的API调用(使用不同的参数)。最初,我使用模拟客户端在微服务之间进行Rest调用[隐式支持负载平衡、服务发现和添加端口元数据等来自模拟客户端]。 这种方法的问题是,调用是同步的,并且需要大量时间。如何/使用什么来触发多个请求并以非阻塞和异步的方式等待响应? TIA!
OAuth2 JWT 配置文件引入了将 JWT 用作授权授予和客户端身份验证的可能性。 JWT客户端身份验证功能独立于特定的授权类型,并且可以与任何授权类型一起使用,也可以与客户端凭据授权一起使用。 但是,使用 JWT 授权类型似乎与将客户端凭据授予与 JWT 客户端身份验证结合使用完全相同,只是语法略有不同。 在这两种情况下,客户端都会联系令牌终结点以获取访问令牌: vs
问题内容: 我在Javascript中使用以下代码进行Ajax调用: 我也想在Java中做到这一点。基本上,我想编写一个Java客户端应用程序,该应用程序通过Ajax调用将该数据发送到服务器。 如何在Java中执行Ajax? 问题答案: AJAX与任何其他HTTP调用均没有不同。您基本上可以从Java发布相同的URL,就目标服务器而言,这无关紧要: 上面的代码或多或少与您的jQuery AJAX调