From 6f322c46df9b14c2ac37512eb6e569398427bf0d Mon Sep 17 00:00:00 2001 From: Hu Zongtang Date: Thu, 21 Feb 2019 14:01:18 +0800 Subject: [PATCH] [issue#789]fix NullPointerException in the PlainAccessValidator#parse() method when recieved some admin request command,if configed no aclRPCHook. (#819) * [issue#790]fix defaultTopicPerm and defaultGroupPerm values which are in the yaml config file doesn't work. * [issue#790]fix defaultTopicPerm and defaultGroupPerm doesn't work,fix the unit test. * [issue#789]fix NullPointerException in the PlainAccessValidator#parse() method when recieved some admin request command,if configed no aclRPCHook. --- .../acl/plain/PlainAccessValidator.java | 5 +++++ .../acl/plain/PlainAccessValidatorTest.java | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java index 34bb1b43..bd50e129 100644 --- a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java +++ b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java @@ -52,6 +52,11 @@ public class PlainAccessValidator implements AccessValidator { } else { accessResource.setWhiteRemoteAddress(remoteAddr); } + + if (request.getExtFields() == null) { + throw new AclException("request's extFields value is null"); + } + accessResource.setRequestCode(request.getCode()); accessResource.setAccessKey(request.getExtFields().get(SessionCredentials.ACCESS_KEY)); accessResource.setSignature(request.getExtFields().get(SessionCredentials.SIGNATURE)); diff --git a/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java b/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java index 16e77020..e7b6f2d6 100644 --- a/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java +++ b/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java @@ -43,6 +43,7 @@ public class PlainAccessValidatorTest { @Before public void init() { System.setProperty("rocketmq.home.dir", "src/test/resources"); + System.setProperty("rocketmq.acl.plain.file", "/conf/plain_acl.yml"); plainAccessValidator = new PlainAccessValidator(); sessionCredentials = new SessionCredentials(); sessionCredentials.setAccessKey("RocketMQ"); @@ -115,6 +116,22 @@ public class PlainAccessValidatorTest { plainAccessValidator.validate(accessResource); } + @Test(expected = AclException.class) + public void validateForAdminCommandWithOutAclRPCHook() { + RemotingCommand consumerOffsetAdminRequest = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_CONSUMER_OFFSET, null); + plainAccessValidator.parse(consumerOffsetAdminRequest, "192.168.0.1:9876"); + + RemotingCommand subscriptionGroupAdminRequest = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_SUBSCRIPTIONGROUP_CONFIG, null); + plainAccessValidator.parse(subscriptionGroupAdminRequest, "192.168.0.1:9876"); + + RemotingCommand delayOffsetAdminRequest = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_DELAY_OFFSET, null); + plainAccessValidator.parse(delayOffsetAdminRequest, "192.168.0.1:9876"); + + RemotingCommand allTopicConfigAdminRequest = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_TOPIC_CONFIG, null); + plainAccessValidator.parse(allTopicConfigAdminRequest, "192.168.0.1:9876"); + + } + @Test public void validatePullMessageTest() { PullMessageRequestHeader pullMessageRequestHeader=new PullMessageRequestHeader(); -- GitLab