api - RabbitMQ HTTP API 请求 401 未经授权

标签 api rest rabbitmq 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 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/

相关文章:

python - 运行消息队列的 python 消费者的最佳实践?

java - RabbitMQ(或者spring cloud stream)可以独占消费消息吗?

android - Retrofit 2 enqueue方法运行2次

c# - IAppbuilder.UseWebApi 有什么作用?

c++ - 使用 Libcurl 将非常大的字符串发送到使用 REST API 的服务器?

docker - 为什么我需要在创建卷时将主机名添加到 docker

java - 通过 API 提取数据的更好方法?

javascript - Google Maps API v3 For 循环问题

android - 如何在 Kotlin 中获取 Retrofit 的原始 json 响应?

rest - 我可以在 Apache CXF 上实现的 RESTful 资源上使用 @RolesAllowed 吗?