【问题标题】:RabbitMQ create user programmatically webRabbitMQ 以编程方式创建用户 web
【发布时间】:2014-12-26 12:40:15
【问题描述】:

我正在开发一个允许管理员在 RabbitMQ 上创建用户的网站。 我检查了 RabbitMQ api 文档,并找到了一个在 windows/unix 提示符下创建用户的示例。命令行如下所示:

curl -i -u ADMIN_USER: ADMIN_PASSW -H "content-type:application/json" -XPUT
{"password":"PASSW_WRITTEN","tags":"administrator"}
http://IP_ADRESS:PORT/api/users/USER_NAME

这里是文档的链接

http://hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_4_1/priv/www/api/index.html

在提示中,它工作正常。但是在网站上,我不知道如何发送这个命令。

注意我正在使用 JSF 在 Java Web 上进行开发,但欢迎使用任何其他 Web 语言示例。

感谢您的帮助。

【问题讨论】:

    标签: rabbitmq java-web-start


    【解决方案1】:

    在网上找了很久,终于找到了如何在RabbitMQ上编程创建用户。基本上,您必须发送带有 PUT 或 POST “状态”的 HTTP 请求。由于我在 Java Web 上进行开发,我可以很容易地找到一个 Java 库来支持我。我使用了 Apache HTTP 库,你可以在这里找到它:

    http://hc.apache.org/downloads.cgi
    

    所以,我的 Java 代码贴在下面:

    对于库,导入:

    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.commons.codec.binary.Base64;
    

    创建新用户的代码:

    // First, save your user/pw with permission to create new users.
    // NOTE: this user is already created on RabbitMQ with permission to create new users
    String enc = new String( Base64.encodeBase64( "USER_NAME_WITH_PERMISSION:PASS_W".getBytes() ) );
    
    try{
      HttpPut putCriaUsuario = new HttpPut( "http://RABBIT_MQ_IP:PORT/api/users/USER_NAME_TO_CREATE );
      putCriaUsuario.addHeader( "Authorization", "Basic " + enc ); // RabbitMQ requires a user with create permission, create it mannually first
      putCriaUsuario.addHeader( "content-type", "application/json" );
      putCriaUsuario.setEntity( new StringEntity( "{\"password\":\"YOUR_PASS_WORD\",\"tags\":\"none\"}" ) );
      client.execute( putCriaUsuario );
    
    //After create, configure RabbitMQ permissions
    
      HttpPut putConfiguraPermissoes = new HttpPut( "http://RABBIT_MQ_IP:PORT/api/permissions/QUEUE_NAME/USER_NAME_CREATED" );
      putConfiguraPermissoes.addHeader( "Authorization", "Basic " + enc );
      putConfiguraPermissoes.addHeader( "content-type", "application/json" );
      putConfiguraPermissoes.setEntity( new StringEntity( "{\"configure\":\"^$\",\"write\":\".*\",\"read\":\".*\"}" ) ); // Permission you wanna. Check RabbitMQ HTTP API for details
      client.execute( putConfiguraPermissoes );
      
    }catch( UnsupportedEncodingException ex ){
      ex.printStackTrace();
    }catch( IOException ex ){
      ex.printStackTrace();
    }
    

    这是 Java,因此可以在桌面应用程序或 Java Web 上使用。在其他语言上遵循相同的逻辑,只是使用另一个库。希望它对我们所有人都有帮助。很高兴分享知识!

    【讨论】:

      【解决方案2】:

      对于那些在授予权限方面遇到问题的人,这个对我有用

      HttpPut putConfiguraPermissoes = new HttpPut("http://127.0.0.1:15672/api/permissions/%2F/THE_NAME_OF_THE_NEW_USER" );  
      putConfiguraPermissoes.addHeader( "Authorization", "Basic " + enc );
      putConfiguraPermissoes.addHeader( "content-type", "application/json" );
      putConfiguraPermissoes.setEntity( new StringEntity( "{\"configure\":\".*\",\"write\":\".*\",\"read\":\".*\"}" ) );
      CloseableHttpClient client2 = HttpClients.createDefault();
      lient2.execute( putConfiguraPermissoes );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-30
        相关资源
        最近更新 更多