ACL文档参考:
发布订阅 ACL - HTTP ACL - 《EMQ X Broker v4.2 使用教程》 - 书栈网 · BookStack
代码实例:
/**
* ACL权限认证
* 主要是用来认证(发布和订阅消息)
* 1.superuser 请求 :用于权限认证
* 2.如果是超级管理员,则可以执行所以AIP接口
* @param clientid
* @param username
* */
@PostMapping("/superuser")
public ResponseEntity superuserACL(@RequestParam("clientid") String clientid,@RequestParam("username") String username){
if(clientid.equals(mqttEntity.getClient_id())&& username.equals(mqttEntity.getUsername()) ){
log.info("---该用户是超级管理员(认证为--通过)----clientid:"+clientid+"usernam:"+username);
return new ResponseEntity(HttpStatus.OK);
}else {
log.info("---该用户是普通用户(认证为(不)通过)----clientid:"+clientid+"usernam:"+username);
return new ResponseEntity(HttpStatus.UNAUTHORIZED);
}
}
/**
* ACL权限认证
* 1.这是实现多好权限认证的AIP接口
* @param clientid Client ID
* @param access 操作类型: 1 订阅 2发布
* @param ipaddr 客户端IP地址
* @param mountpoint MOuntpoint
* @param topic 主题
* @param username 客户端用户名
* */
@PostMapping("/acl")
public ResponseEntity acl(@RequestParam("access") int access,@RequestParam("username") String username,
@RequestParam("clientid") String clientid ,@RequestParam("ipaddr") String ipaddr,
@RequestParam("topic") String topic ,@RequestParam("mountpoint") String mountpoint
){
//tests -tests ,只能订阅不能发布 只能订阅testtopic/123
String value = stringRedisTemplate.opsForValue().get(username);
if(!value.isEmpty()&& topic.equals("testtopic/#")&&access==1){
log.info("tests--只订阅(testtopic/123)access="+access+"username="+username+"topic="+topic);
return new ResponseEntity(HttpStatus.OK);
}
// admin 可以订阅和发布 testtopic/123
if(!value.isEmpty()&& topic.equals("testtopic/123")){
log.info("admin--可以订阅和发布(testtopic/123)access="+access+"username="+username+"topic="+topic);
return new ResponseEntity(HttpStatus.OK);
}
log.info("username"+username+"没有权限 发布?订阅");
return new ResponseEntity(HttpStatus.UNAUTHORIZED);
}
图片: