我正在尝试访问 RabbitMQ rest,但出现 401 未经授权的错误。我想访问队列信息并获取消息编号。
我发现这是一个解决方案
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpHost targetHost = new HttpHost("xx.xx.xx.xx", 15672, "http");
HttpPut request = new HttpPut(
"/api/queues/%2F/queue-name");
httpClient.getCredentialsProvider().setCredentials(
new AuthScope(targetHost.getHostName(), targetHost.getPort()),
new UsernamePasswordCredentials("guest", "guest"));
AuthCache authCache = new BasicAuthCache();
BasicScheme basicAuth = new BasicScheme();
authCache.put(targetHost, basicAuth);
BasicHttpContext localcontext = new BasicHttpContext();
localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);
request.addHeader("Content-Type", "application/json");
StringEntity input = new StringEntity(
"{\"vhost\":\"/\",\"durable\":\"false\",\"auto_delete\":\"false\",\"arguments\":{}}");
request.setEntity(input);
HttpResponse response = httpClient.execute(targetHost, request, localcontext);
但它不起作用。我看到 DefaultHttpClient 类已贬值,所以我尝试了这样的操作
HttpHost targetHost = new HttpHost("xx.xx.xx.xx", 15672, "http");
HttpPut request = new HttpPut("/api/whoami");
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
CredentialsProvider credentialProvider = new BasicCredentialsProvider();
credentialProvider.setCredentials(
new AuthScope(targetHost.getHostName(), targetHost.getPort()),
new UsernamePasswordCredentials("guest","guest")
);
AuthCache authCache = new BasicAuthCache();
BasicScheme basicAuth = new BasicScheme();
authCache.put(targetHost, basicAuth);
HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credentialProvider);
context.setAuthCache(authCache);
request.addHeader("Content-Type", "application/json");
HttpResponse response = httpClient.execute(targetHost, request, context);
然后访问REST思想WebTarget,像这样
WebTarget queueREST = RESTClientManager.getClient().target("xx.xx.xx.xx:15672/api/queues/%2F/queue-name");
但我仍然收到错误 401 Unauthorized。任何建议如何解决这个问题?
最佳答案
“ guest ”用户只能通过本地主机连接。允许使用 guest 更改的远程连接 rabbitmq.config
并添加 [{rabbit, [{loopback_users, []}]}].
[来源:https://www.rabbitmq.com/access-control.html]
就我而言,我用以下方法修复它:
sudo sed -i 's/{default_pass, <<"guest">>}$/{default_pass, <<"guest">>},\n {loopback_users, []}/' /etc/rabbitmq/rabbitmq.config
关于api - RabbitMQ HTTP API 请求 401 未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743185/