From 97ae28cd93e2f14e1142a15913e8db230202d831 Mon Sep 17 00:00:00 2001 From: nzomkxia Date: Wed, 20 Feb 2019 10:54:03 +0800 Subject: [PATCH] Apply #2925 to branch 2.6.x --- .../com/alibaba/dubbo/common/Constants.java | 2 + .../telnet/support/TelnetHandlerAdapter.java | 39 +++++++++++++++---- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java b/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java index cedb20b688f..a993c3f70fd 100644 --- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java @@ -641,6 +641,8 @@ public class Constants { public static final String FORCE_USE_TAG = "dubbo.force.tag"; + public static final String TELNET = "telnet"; + /* * private Constants(){ } */ diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/telnet/support/TelnetHandlerAdapter.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/telnet/support/TelnetHandlerAdapter.java index 478ce0f54ab..f42d81f8444 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/telnet/support/TelnetHandlerAdapter.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/telnet/support/TelnetHandlerAdapter.java @@ -17,7 +17,9 @@ package com.alibaba.dubbo.remoting.telnet.support; import com.alibaba.dubbo.common.Constants; +import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.extension.ExtensionLoader; +import com.alibaba.dubbo.common.utils.StringUtils; import com.alibaba.dubbo.remoting.Channel; import com.alibaba.dubbo.remoting.RemotingException; import com.alibaba.dubbo.remoting.telnet.TelnetHandler; @@ -49,14 +51,20 @@ public String telnet(Channel channel, String message) throws RemotingException { } if (command.length() > 0) { if (extensionLoader.hasExtension(command)) { - try { - String result = extensionLoader.getExtension(command).telnet(channel, message); - if (result == null) { - return null; + if (commandEnabled(channel.getUrl(), command)) { + try { + String result = extensionLoader.getExtension(command).telnet(channel, message); + if (result == null) { + return null; + } + buf.append(result); + } catch (Throwable t) { + buf.append(t.getMessage()); } - buf.append(result); - } catch (Throwable t) { - buf.append(t.getMessage()); + } else { + buf.append("Command: "); + buf.append(command); + buf.append(" disabled"); } } else { buf.append("Unsupported command: "); @@ -72,4 +80,21 @@ public String telnet(Channel channel, String message) throws RemotingException { return buf.toString(); } + private boolean commandEnabled(URL url, String command) { + boolean commandEnable = false; + String supportCommands = url.getParameter(Constants.TELNET); + if (StringUtils.isEmpty(supportCommands)) { + commandEnable = true; + } else { + String[] commands = Constants.COMMA_SPLIT_PATTERN.split(supportCommands); + for (String c : commands) { + if (command.equals(c)) { + commandEnable = true; + break; + } + } + } + return commandEnable; + } + }