RabbitMQ HTTP API 请求 401 未经授权 [英] RabbitMQ HTTP API request 401 Unauthorized

查看:438
本文介绍了RabbitMQ HTTP API 请求 401 未经授权的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试访问 RabbitMQ rest,但出现 401 未经授权的错误.我想访问队列信息并获取消息编号.

I'm trying to access to RabbitMQ rest, but I got 401 unauthorized error. I want to access to queue information and to get messages number.

我发现这是一个解决方案

I found this as a solution

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 类已贬值,所以我尝试了这样的

but it doesn't work. I saw that DefaultHttpClient class is depreciated so I tried something like this

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,就像这样

and then to access to REST thought WebTarget, something like this

WebTarget queueREST = RESTClientManager.getClient().target("xx.xx.xx.xx:15672/api/queues/%2F/queue-name");

但我仍然收到错误 401 Unauthorized.有什么建议可以解决这个问题吗?

but I still get error 401 Unauthorized. Any suggestion how to solve this problem?

推荐答案

guest"用户只能通过本地主机连接.允许远程连接使用访客更改 rabbitmq.config 并添加 [{rabbit, [{loopback_users, []}]}].

"guest" user can only connect via localhost. To allow remote connections using guest change rabbitmq.config and add [{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

这篇关于RabbitMQ HTTP API 请求 401 未经授权的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆