rabbitmq 插件之rabbitmq-auth-backend-http

rabbitmq-auth-backend-http 是rabbitMq的一个鉴权插件,从3.6.X开始可以作为额外添加的插件使用,从3.7.0以后rabbitMq自带使用

本文基于rabitmq 3.8.18

一、整体环境搭建

1、rabbitmq服务器搭建环境:

使用docker

docker pull rabbitmq:3.8.18-management

docker run -d --hostname my-rabbit-manager --name rabbit-manager -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:3.8.18-management

至此服务器搭建完毕

2、测试:

访问localhost:15672

在管理页面新建exchange,queue, routingKey进行绑定(如果需要新建vhost,新用户test,一下使用用户test 和vhost:/test进行)

新建springboot项目添加依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-amqp</artifactId>

</dependency>

appliaction.properties

生产者代码(为方便写在controller中,可以根据需要写单元测试中也可写其他方式):

rabbitTemplate.convertAndSend(exchange,routingKey,info);

可以发现队列中已经有数据了

消费者代码(我放入队列的是字符串,直接读取了):

@Service

@EnableRabbit

public class SimpleMsgConsumer {

    @RabbitListener(queues = "${test.queue}", containerFactory = "receiveRabbitListenerContainerFactory")

    public void sendRedPacket(String body) {

        System.out.println(body);

    }

}

至此rabbitmq整体搭建和测试完成

二、插件调用

插件实现鉴权流程说明

在启动插件后,当任何请求到达队列时候,队列会调用http请求到一个web服务器去查询是否该请求有对应的权限,主要分为以下四个权限

1、账号权限:用户名密码是否正确

2、vhost权限:该账号下是否有对应的vhost

3、资源权限:该用户是否有指定vhost下的exchange、queue的读写配置全新啊

4、topic权限:主题授权的概念只对面向主题的协议(如 MQTT 和 STOMP)才真正有意义(amqp如果不特殊配制,只用到了以上三个)

特别说明:如果启用了插件,那么任何访问该rabbitmq的校验都会到这里验证,忽略掉服务器上原来的配置(也就是说即使manager后台没有配置的用户,只要权限验证接口返回可以访问那么就能正常的生产和消费队列数据)

启动rabbitmq-auth-backend-http插件

进入容器

docker exec -it some-rabbit /bin/bash

1、修改配置,当前使用的是linux系统的容器,在/etc/rabbitmq/下有rabbitmq.conf文件

vim /etc/rabbitmq/rabbitmq.conf

新增

auth_backends.1 = http

auth_http.http_method = post

auth_http.user_path = http://host.docker.internal:8080/auth/user

auth_http.vhost_path = http://host.docker.internal:8080/auth/vhost

auth_http.resource_path = http://host.docker.internal:8080/auth/resource

auth_http.topic_path = http://host.docker.internal:8080/auth/topic

说明:因为我用的是docker,测试接口在宿主机上需要使用host.docker.internal通信,具体自行学习docker网络设置相关

2、启动插件

rabbitmq-plugins enable rabbitmq_auth_backend_http

3、重启服务

$ docker container restart a8b2a1410768

注意如果此时没有启动要访问的web服务,那么所有的rabbit请求(包含管理平台的登陆)都是无权限的

4、启动web服务,基于springboot,代码如下(官方示例)

https://gitee.com/leo18945/rabbitmq-auth-backend-http/tree/master/examples

这样你能在web服务中看到mq的请求信息

需要说明的是user和vhost请求是有缓存的,观察下来发现一旦鉴权通过就一直有效(待补充)

关于主题授权的说明

https://www.rabbitmq.com/access-control.html#topic-authorisation

插件rabbitmq-auth-backend-cache

rabbitmq-plugins enable rabbitmq_auth_backend_cache

配置 /etc/rabbitmq/rabbitmq.conf

auth_backends.1 = cache

auth_cache.cached_backend = http

auth_cache.cache_ttl = 5000

这里的5000单位是ms,表示一个请求结束后5s 如果在5s内连续请求将不会发起resource鉴权请求

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值