package zx.soft.zk.manager.controller; import java.io.IOException; import java.io.PrintWriter; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.zookeeper.ZooKeeper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import zx.soft.zk.manager.domain.LeafBean; import zx.soft.zk.manager.utils.ServletUtil; import zx.soft.zk.manager.utils.ZooKeeperUtil; /** * Rest接入类 * * @author wanggang * */ @WebServlet(urlPatterns = { "/acd/appconfig" }) public class RestAccess extends HttpServlet { private static final long serialVersionUID = -2617081577923340245L; private final static Logger logger = LoggerFactory.getLogger(RestAccess.class); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.debug("Rest Action!"); try { Properties globalProps = (Properties) this.getServletContext().getAttribute("globalProps"); String zkServer = globalProps.getProperty("zkServer"); String[] zkServerLst = zkServer.split(","); String accessRole = ZooKeeperUtil.ROLE_USER; if ((globalProps.getProperty("blockPwdOverRest") != null) && (Boolean.valueOf(globalProps.getProperty("blockPwdOverRest")) == Boolean.FALSE)) { accessRole = ZooKeeperUtil.ROLE_ADMIN; } String clusterName = request.getParameter("cluster"); String appName = request.getParameter("app"); String hostName = request.getParameter("host"); String[] propNames = request.getParameterValues("propNames"); String propValue = ""; if (hostName == null) { hostName = ServletUtil.INSTANCE.getRemoteAddr(request); } ZooKeeper zk = ServletUtil.INSTANCE.getZookeeper(request, response, zkServerLst[0]); //get the path of the hosts entry. LeafBean hostsNode = ZooKeeperUtil.INSTANCE.getNodeValue(zk, ZooKeeperUtil.ZK_HOSTS, ZooKeeperUtil.ZK_HOSTS + "/" + hostName, hostName, accessRole); StringBuilder lookupPath = new StringBuilder(hostsNode.getStrValue()); //You specify a cluster or an app name to group. if (clusterName != null) { lookupPath.append("/").append(clusterName).append("/").append(hostName); } if (appName != null) { lookupPath.append("/").append(appName).append("/").append(hostName); } StringBuilder resultOut = new StringBuilder(); LeafBean propertyNode; String[] pathElements = lookupPath.toString().split("/"); for (String propName : propNames) { StringBuffer concatPath = new StringBuffer(); for (String path : pathElements) { concatPath.append(path).append("/"); propertyNode = ZooKeeperUtil.INSTANCE.getNodeValue(zk, concatPath.toString(), concatPath + propName, propName, accessRole); if (propertyNode != null) { propValue = propertyNode.getStrValue(); } } resultOut.append(propName).append("=").append(propValue).append("\n"); } response.setContentType("text/plain"); try (PrintWriter out = response.getWriter()) { out.write(resultOut.toString()); } } catch (Exception ex) { ServletUtil.INSTANCE.renderError(request, response, ex.getMessage()); } } }