Skip to content

Commit 9834691

Browse files
authored
[ISSUE #9021] Correct the error message of acl command (#9022)
1 parent 7da9ad4 commit 9834691

File tree

1 file changed

+37
-35
lines changed

1 file changed

+37
-35
lines changed

broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java

+37-35
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.apache.commons.collections.CollectionUtils;
4646
import org.apache.commons.lang3.StringUtils;
4747
import org.apache.rocketmq.acl.AccessValidator;
48+
import org.apache.rocketmq.acl.common.AclException;
4849
import org.apache.rocketmq.acl.plain.PlainAccessValidator;
4950
import org.apache.rocketmq.auth.authentication.enums.UserType;
5051
import org.apache.rocketmq.auth.authentication.exception.AuthenticationException;
@@ -771,26 +772,15 @@ private void deleteTopicInBroker(String topic) {
771772
this.brokerController.getMessageStore().deleteTopics(Sets.newHashSet(topic));
772773
}
773774

774-
private synchronized RemotingCommand updateAndCreateAccessConfig(ChannelHandlerContext ctx,
775-
RemotingCommand request) throws RemotingCommandException {
775+
private synchronized RemotingCommand updateAndCreateAccessConfig(ChannelHandlerContext ctx, RemotingCommand request) {
776776
final RemotingCommand response = RemotingCommand.createResponseCommand(null);
777777

778-
final CreateAccessConfigRequestHeader requestHeader =
779-
(CreateAccessConfigRequestHeader) request.decodeCommandCustomHeader(CreateAccessConfigRequestHeader.class);
780-
781-
PlainAccessConfig accessConfig = new PlainAccessConfig();
782-
accessConfig.setAccessKey(requestHeader.getAccessKey());
783-
accessConfig.setSecretKey(requestHeader.getSecretKey());
784-
accessConfig.setWhiteRemoteAddress(requestHeader.getWhiteRemoteAddress());
785-
accessConfig.setDefaultTopicPerm(requestHeader.getDefaultTopicPerm());
786-
accessConfig.setDefaultGroupPerm(requestHeader.getDefaultGroupPerm());
787-
accessConfig.setTopicPerms(UtilAll.split(requestHeader.getTopicPerms(), ","));
788-
accessConfig.setGroupPerms(UtilAll.split(requestHeader.getGroupPerms(), ","));
789-
accessConfig.setAdmin(requestHeader.isAdmin());
790778
try {
779+
ensureAclEnabled();
791780

781+
final CreateAccessConfigRequestHeader requestHeader = request.decodeCommandCustomHeader(CreateAccessConfigRequestHeader.class);
792782
AccessValidator accessValidator = this.brokerController.getAccessValidatorMap().get(PlainAccessValidator.class);
793-
if (accessValidator.updateAccessConfig(accessConfig)) {
783+
if (accessValidator.updateAccessConfig(createAccessConfig(requestHeader))) {
794784
response.setCode(ResponseCode.SUCCESS);
795785
response.setOpaque(request.getOpaque());
796786
response.markResponseType();
@@ -813,15 +803,28 @@ private synchronized RemotingCommand updateAndCreateAccessConfig(ChannelHandlerC
813803
return null;
814804
}
815805

816-
private synchronized RemotingCommand deleteAccessConfig(ChannelHandlerContext ctx,
817-
RemotingCommand request) throws RemotingCommandException {
806+
private PlainAccessConfig createAccessConfig(final CreateAccessConfigRequestHeader requestHeader) {
807+
PlainAccessConfig accessConfig = new PlainAccessConfig();
808+
accessConfig.setAccessKey(requestHeader.getAccessKey());
809+
accessConfig.setSecretKey(requestHeader.getSecretKey());
810+
accessConfig.setWhiteRemoteAddress(requestHeader.getWhiteRemoteAddress());
811+
accessConfig.setDefaultTopicPerm(requestHeader.getDefaultTopicPerm());
812+
accessConfig.setDefaultGroupPerm(requestHeader.getDefaultGroupPerm());
813+
accessConfig.setTopicPerms(UtilAll.split(requestHeader.getTopicPerms(), ","));
814+
accessConfig.setGroupPerms(UtilAll.split(requestHeader.getGroupPerms(), ","));
815+
accessConfig.setAdmin(requestHeader.isAdmin());
816+
return accessConfig;
817+
}
818+
819+
private synchronized RemotingCommand deleteAccessConfig(ChannelHandlerContext ctx, RemotingCommand request) {
818820
final RemotingCommand response = RemotingCommand.createResponseCommand(null);
819821

820-
final DeleteAccessConfigRequestHeader requestHeader =
821-
(DeleteAccessConfigRequestHeader) request.decodeCommandCustomHeader(DeleteAccessConfigRequestHeader.class);
822822
LOGGER.info("DeleteAccessConfig called by {}", RemotingHelper.parseChannelRemoteAddr(ctx.channel()));
823823

824824
try {
825+
ensureAclEnabled();
826+
827+
final DeleteAccessConfigRequestHeader requestHeader = request.decodeCommandCustomHeader(DeleteAccessConfigRequestHeader.class);
825828
String accessKey = requestHeader.getAccessKey();
826829
AccessValidator accessValidator = this.brokerController.getAccessValidatorMap().get(PlainAccessValidator.class);
827830
if (accessValidator.deleteAccessConfig(accessKey)) {
@@ -848,15 +851,13 @@ private synchronized RemotingCommand deleteAccessConfig(ChannelHandlerContext ct
848851
return null;
849852
}
850853

851-
private synchronized RemotingCommand updateGlobalWhiteAddrsConfig(ChannelHandlerContext ctx,
852-
RemotingCommand request) throws RemotingCommandException {
853-
854+
private synchronized RemotingCommand updateGlobalWhiteAddrsConfig(ChannelHandlerContext ctx, RemotingCommand request) {
854855
final RemotingCommand response = RemotingCommand.createResponseCommand(null);
855856

856-
final UpdateGlobalWhiteAddrsConfigRequestHeader requestHeader =
857-
(UpdateGlobalWhiteAddrsConfigRequestHeader) request.decodeCommandCustomHeader(UpdateGlobalWhiteAddrsConfigRequestHeader.class);
858-
859857
try {
858+
ensureAclEnabled();
859+
860+
final UpdateGlobalWhiteAddrsConfigRequestHeader requestHeader = request.decodeCommandCustomHeader(UpdateGlobalWhiteAddrsConfigRequestHeader.class);
860861
AccessValidator accessValidator = this.brokerController.getAccessValidatorMap().get(PlainAccessValidator.class);
861862
if (accessValidator.updateGlobalWhiteAddrsConfig(UtilAll.split(requestHeader.getGlobalWhiteAddrs(), ","),
862863
requestHeader.getAclFileFullPath())) {
@@ -883,18 +884,12 @@ private synchronized RemotingCommand updateGlobalWhiteAddrsConfig(ChannelHandler
883884
}
884885

885886
private RemotingCommand getBrokerAclConfigVersion(ChannelHandlerContext ctx, RemotingCommand request) {
886-
887887
final RemotingCommand response = RemotingCommand.createResponseCommand(GetBrokerAclConfigResponseHeader.class);
888888

889-
if (!brokerController.getBrokerConfig().isAclEnable()) {
890-
response.setCode(ResponseCode.SYSTEM_ERROR);
891-
response.setRemark("The broker does not enable acl.");
892-
return response;
893-
}
894-
895-
final GetBrokerAclConfigResponseHeader responseHeader = (GetBrokerAclConfigResponseHeader) response.readCustomHeader();
896-
897889
try {
890+
ensureAclEnabled();
891+
892+
final GetBrokerAclConfigResponseHeader responseHeader = (GetBrokerAclConfigResponseHeader) response.readCustomHeader();
898893
AccessValidator accessValidator = this.brokerController.getAccessValidatorMap().get(PlainAccessValidator.class);
899894

900895
responseHeader.setVersion(accessValidator.getAclConfigVersion());
@@ -907,9 +902,16 @@ private RemotingCommand getBrokerAclConfigVersion(ChannelHandlerContext ctx, Rem
907902
return response;
908903
} catch (Exception e) {
909904
LOGGER.error("Failed to generate a proper getBrokerAclConfigVersion response", e);
905+
response.setCode(ResponseCode.SYSTEM_ERROR);
906+
response.setRemark(e.getMessage());
907+
return response;
910908
}
909+
}
911910

912-
return null;
911+
private void ensureAclEnabled() {
912+
if (!brokerController.getBrokerConfig().isAclEnable()) {
913+
throw new AclException("The broker does not enable acl.");
914+
}
913915
}
914916

915917
private RemotingCommand getUnknownCmdResponse(ChannelHandlerContext ctx, RemotingCommand request) {

0 commit comments

Comments
 (0)