官方中文参考文档:
https://docs.emqx.io/docs/broker/v3/cn/plugins.html#http
说明:本示例基于docker上部署运行的MQTT 3.0版本介绍,插件已启动Dashboard面板
第一步:MQTT消息面板部分
配置auth、super及ack请求验证的api路径:
第二部分:Java后台api请求:
package com.ifreecomm.education.platform.apis.controller.internal;
import com.ifreecomm.education.infrastructure.authentication.AllowAnonymous;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController("openMqttController")
@RequestMapping("/api/internal/mqtt")
@Api(description = "MQTT Broker调用的API")
public class EmqAuthController {
@ApiOperation("客户端登陆验证接口")
@PostMapping("/auth")
@AllowAnonymous
public ResponseEntity<?> auth(@ApiParam("用户名,使用UserId代替")
@RequestParam String username,
@ApiParam("MQTT客户端id")
@RequestParam String clientid,
@ApiParam("MQTT验证密码,使用Token代替")
@RequestParam String password) {
log.info("=========> receive auth request:clientid = {}, username={}, password={}",clientid,username,password);
/**
* TODO 业务鉴权逻辑
*/
return ResponseEntity.status(HttpStatus.OK).build();
}
@ApiOperation("超级用户验证接口")
@PostMapping("/superuser")
@AllowAnonymous
public ResponseEntity<?> superuser(@ApiParam("用户名,使用UserId代替")
@RequestParam String username,
@ApiParam("MQTT客户端id")
@RequestParam String clientid) {
/**
* TODO 超级用户验证逻辑
*/
return ResponseEntity.ok().build();
}
@ApiOperation("客户端操作权限验证接口")
@PostMapping("/acl")
@AllowAnonymous
public ResponseEntity<?> acl(@ApiParam("操作类型,订阅:1,发布:2")
@RequestParam Integer access,
@ApiParam("用户名,使用UserId代替")
@RequestParam String username,
@ApiParam("MQTT客户端id")
@RequestParam String clientid,
@ApiParam("操作主题(topic)")
@RequestParam String topic) {
/**
* TODO 客户端操作权限验证逻辑
*/
return ResponseEntity.ok().build();
}
}
第三步:使用控制面板Websocket测试,后台依次进入auth、superuser、acl控制器