[英]RabbitMQ HTTP API request 401 Unauthorized
我正在嘗試訪問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未經授權。 有什么建議如何解決這個問題?
“來賓”用戶只能通過localhost連接。 要允許使用來賓的遠程連接,請更改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
我使用此https://github.com/rabbitmq/hop找到了解決方案。
您也可以使用更完整的我的Rabbitmq-management-java-client庫。
例如,一個用於驗證和列出隊列的代碼段:
RabbitManagementApi api = RabbitManagementApi.newInstance("http://localhost:15672/" , "user" , "password");
List<Queue> queues = api.listQueues("vhost");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.