com.dianping.lion.api.http.GetConfigServlet.java Source code

Java tutorial

Introduction

Here is the source code for com.dianping.lion.api.http.GetConfigServlet.java

Source

/**
 * Project: com.dianping.lion.lion-api-0.0.1
 *
 * File Created at 2012-8-1
 * $Id$
 *
 * Copyright 2010 dianping.com.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * Dianping Company. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with dianping.com.
 */
package com.dianping.lion.api.http;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import com.dianping.lion.ServiceConstants;
import com.dianping.lion.entity.Config;
import com.dianping.lion.entity.Environment;
import com.dianping.lion.exception.RuntimeBusinessException;
import com.dianping.lion.util.IPUtils;
import com.dianping.lion.util.SecurityUtils;

/**
 * TODO Comment of GetConfigServlet
 *
 * @author danson.liu
 */
public class GetConfigServlet extends AbstractLionServlet {

    private static final long serialVersionUID = 1512883947325409564L;

    public GetConfigServlet() {
        this.requestIdentityRequired = false;
    }

    @Override
    protected void doService(HttpServletRequest req, HttpServletResponse resp, String querystr) throws Exception {
        String env = getNotBlankParameter(req, PARAM_ENV);
        Environment environment = getRequiredEnv(env);
        if (environment.isOnline()) {
            checkAccessibility(req);
        }

        PrintWriter writer = resp.getWriter();
        String key = getNotBlankParameter(req, PARAM_KEY);
        String group = getGroupParameter(req);

        Config config = configService.findConfigByKey(key);
        if (config != null) {
            String configVal = configService.resolveConfigValue(config.getId(), environment.getId(), group);
            configVal = SecurityUtils.tryDecode(configVal);
            if (configVal != null) {
                writer.print(configVal);
                return;
            }
        }
        writer.print("<null>");
    }

    protected void checkAccessibility(HttpServletRequest req) {
        String userIP = IPUtils.getUserIP(req);
        String whiteList = systemSettingService.getSetting(ServiceConstants.SETTING_GETCONFIG_WHITELIST);
        if (StringUtils.isBlank(whiteList)) {
            return;
        }
        if (whiteList.contains(userIP) || whiteList.contains("*.*.*.*")) {
            return;
        }
        String[] ipSegments = StringUtils.split(userIP, '.');
        if (ipSegments.length == 4) {
            for (int i = 3; i >= 1; i--) {
                String left = StringUtils.join(ipSegments, '.', 0, i);
                String pattern = left + StringUtils.repeat(".*", 4 - i);
                if (whiteList.contains(pattern)) {
                    return;
                }
            }
        }
        throw new RuntimeBusinessException("You have no privilege.");
    }

}