簡體   English   中英

RabbitMQ HTTP API請求401未經授權

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM