All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gitee.easyopen.ApiConfig Maven / Gradle / Ivy

package com.gitee.easyopen;

import com.gitee.easyopen.auth.Oauth2Manager;
import com.gitee.easyopen.auth.Oauth2Service;
import com.gitee.easyopen.auth.impl.Oauth2ServiceImpl;
import com.gitee.easyopen.bean.ApiDefinition;
import com.gitee.easyopen.config.ConfigClient;
import com.gitee.easyopen.interceptor.ApiInterceptor;
import com.gitee.easyopen.jwt.JwtService;
import com.gitee.easyopen.jwt.impl.JwtServiceImpl;
import com.gitee.easyopen.limit.LimitConfigManager;
import com.gitee.easyopen.limit.LimitManager;
import com.gitee.easyopen.limit.LimitType;
import com.gitee.easyopen.monitor.ApiMonitorStore;
import com.gitee.easyopen.monitor.MonitorInterceptor;
import com.gitee.easyopen.monitor.MonitorStore;
import com.gitee.easyopen.permission.PermissionManager;
import com.gitee.easyopen.doc.DocFileCreator;
import com.gitee.easyopen.serializer.JsonResultSerializer;
import com.gitee.easyopen.serializer.XmlResultSerializer;
import com.gitee.easyopen.session.ApiSessionManager;
import com.gitee.easyopen.session.SessionManager;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.ClassPathResource;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 配置类,所有配置相关都在这里.
 * 
 * @author tanghc
 *
 */
public class ApiConfig {
    /**
     * 加密工具
     */
    private Encrypter encrypter = new ApiEncrypter();
    /**
     * app秘钥管理
     */
    private AppSecretManager appSecretManager = new CacheAppSecretManager();
    /**
     * 返回结果
     */
    private ResultCreator resultCreator = new ApiResultCreator();
    /**
     * json序列化
     */
    private ResultSerializer jsonResultSerializer = new JsonResultSerializer();
    /**
     * xml序列化
     */
    private ResultSerializer xmlResultSerializer = new XmlResultSerializer();
    /**
     * 签名工具
     */
    private Signer signer = new ApiSigner();

    private RespWriter respWriter = new ApiRespWriter();
    /**
     * 参数解析
     */
    private ParamParser paramParser = new ApiParamParser();

    /**
     * session管理
     */
    private SessionManager sessionManager = new ApiSessionManager();
    
    /**
     * 拦截器
     */
    private ApiInterceptor[] interceptors = {};
    

    /**
     * oauth2服务端默认实现
     */
    private Oauth2Service oauth2Service = new Oauth2ServiceImpl();

    
    /**
     * 存储监控信息
     */
    private MonitorStore monitorStore = new ApiMonitorStore();
    
    /**
     * 错误模块
     */
    private List isvModules = new ArrayList();

    /**
     * data部分解码
     */
    private DataDecoder dataDecoder = new ApiDataDecoder();

    /**
     * api注册事件
     */
    private ApiRegistEvent apiRegistEvent = new ApiRegistEvent() {
        @Override
        public void onSuccess(ApiDefinition apiDefinition) {
        }
    };

    /* ************在构造方法中初始化************ */
    /**
     * 负责监控的拦截器
     */
    private ApiInterceptor monitorInerceptor;
    
    /**
     * 校验接口
     */
    private Validator validator;
    
    /**
     * JWT处理 
     */
    private JwtService jwtService;
    /**
     * 请求转发
     */
    private Invoker invoker;
    /**
     * oauth2认证服务,需要自己实现
     */
    private Oauth2Manager oauth2Manager;
    
    /** 限流管理 */
    private LimitManager limitManager;
    /** 限流配置管理 */
    private LimitConfigManager limitConfigManager;
    
    /** 权限管理 */
    private PermissionManager permissionManager;

    private DocFileCreator docFileCreator;
    
    /* ***************************** */
    
    
    private String appName = "app";

    /**
     * 默认版本号
     */
    private String defaultVersion = "";
    
    /**
     * 超时时间
     */
    private int timeoutSeconds = 3;

    /**
     * 是否生成doc文档
     */
    private boolean showDoc;
    
    /**
     * 文档页面密码,默认为null,如果不为null,文档页面一定开启。
     */
    private String docPassword;
    
    /**
     * 文档模板路径
     */
    private String docClassPath = "/easyopen_template/doc.html";

    /**
     * 文档下载模板路径
     */
    private String docPdfClassPath = "/easyopen_template/docPdf.html";
    private String docPdfCssClassPath = "/easyopen_template/docPdf.css";
    
    /**
     * 监控模板路径
     */
    private String monitorClassPath = "/easyopen_template/monitor.html";
    
    /**
     * 登录页模板路径
     */
    private String loginClassPath = "/easyopen_template/login.html";
    
    /**
     * 限流 模板路径
     */
    private String limitClassPath = "/easyopen_template/limit.html";
    /**
     * 进入限流页面密码
     */
    private String limitPassword = "limit123";
    
    /** 默认限流策略 */
    private LimitType defaultLimitType = LimitType.LIMIT;

    /** 默认每秒可处理请求数*/
    private int defaultLimitCount = 50;

    /** 默认令牌桶个数 */
    private int defaultTokenBucketCount = 50;
    
    private static String CONFIG_FOLDER = System.getProperty("user.dir") +  File.separator + "local-config" + File.separator;

    /** 本地限流缓存全路径 */
    private String localLimitConfigFile;
    
    /** 本地权限缓存全路径 */
    private String localPermissionConfigFile;
    
    /** 本地秘钥缓存全路径 */
    private String localSecretConfigFile;
    

    private ConfigClient configClient;
    
    /**
     * 忽略验证
     */
    private boolean ignoreValidate;

    /**
     * 登录视图页面用于,mvc视图,如:loginView
     */
    private String oauth2LoginUri = "/oauth2login";

    /**
     * oauth2的accessToken过期时间,单位秒,默认2小时
     */
    private long oauth2ExpireIn = 7200;

    /**
     * jwt过期时间,秒,默认2小时
     */
    private int jwtExpireIn = 7200;
    /**
     * RSA加密对应的私钥
     */
    private String privateKey;

    /**
     * 私钥文件存放的classpath地址
     */
    private String priKeyPath = "/pri.key";
    
    /**
     * 是否开启监控
     */
    private boolean showMonitor = true;
    /**
     * 进入监控页面密码
     */
    private String monitorPassword = "monitor123";
    /**
     * 存放监控错误信息队列长度。超出长度,新值替换旧值
     */
    private int monitorErrorQueueSize = 5;
    /**
     * 处理线程池大小
     */
    private int monitorExecutorSize = 2;

    /**
     * 最外包装类class
     */
    private Class wrapperClass;

    /**
     * jwt对应的secret
     */
    private String jwtSecret = "#56gu25@41tCVr]>0$";

    /** markdown文档保存目录 */
    private String markdownDocDir;
    
    public ApiConfig() {
        isvModules.add("i18n/isv/error");
        monitorInerceptor = new MonitorInterceptor(this);
        validator = new ApiValidator(this);
        jwtService = new JwtServiceImpl(this);
        invoker = new ApiInvoker(this);
    }

    public void setAppName(String appName) {
        this.appName = appName;
        if(localLimitConfigFile == null) {
            /** 本地限流缓存全路径 */
            localLimitConfigFile = System.getProperty("conflimit.file", CONFIG_FOLDER + appName + "-limit.json");
        }
        if(localPermissionConfigFile == null) {
            /** 本地权限缓存全路径 */
            localPermissionConfigFile = System.getProperty("confperm.file", CONFIG_FOLDER + appName + "-permission.json");
        }
        if(localSecretConfigFile == null) {
            /** 本地秘钥缓存全路径 */
            localSecretConfigFile = System.getProperty("confsecret.file", CONFIG_FOLDER + appName + "-secret.json");
        }
    }

    /**
     * 开启app对接模式,开启后不进行timeout校验。
* 如果平台直接跟Android或IOS对接,可开启这个功能。因为手机上的时间有可能跟服务端的时间不一致(用户的手机情况不可控)。
* 失去了时间校验,一个请求有可能被反复调用,服务端需要防止重复提交,有必要的话上HTTPS。 */ public void openAppMode() { this.timeoutSeconds = 0; } public Encrypter getEncrypter() { return encrypter; } public void setEncrypter(Encrypter encrypter) { this.encrypter = encrypter; } public void loadPrivateKey() { ClassPathResource res = new ClassPathResource(this.priKeyPath); if(res.exists()) { try { this.privateKey = IOUtils.toString(res.getInputStream(), "UTF-8"); } catch (IOException e) { e.printStackTrace(); } } } public void initOauth2Service(Oauth2Manager oauth2Manager) { this.oauth2Manager = oauth2Manager; this.oauth2Service.setOauth2Manager(oauth2Manager); } public boolean isShowDoc() { return showDoc; } public void setShowDoc(boolean showDoc) { this.showDoc = showDoc; } public boolean isShowMonitor() { return showMonitor; } public void setShowMonitor(boolean showMonitor) { this.showMonitor = showMonitor; } /** * 添加秘钥配置,map中存放秘钥信息,key对应appKey,value对应secret * * @param appSecretStore */ public void addAppSecret(Map appSecretStore) { this.appSecretManager.addAppSecret(appSecretStore); } public void setAppSecret(Map appSecret) { this.addAppSecret(appSecret); } public AppSecretManager getAppSecretManager() { return appSecretManager; } public void setAppSecretManager(AppSecretManager appSecretManager) { this.appSecretManager = appSecretManager; } public ResultCreator getResultCreator() { return resultCreator; } public void setResultCreator(ResultCreator resultCreator) { this.resultCreator = resultCreator; } public int getTimeoutSeconds() { return timeoutSeconds; } public void setTimeoutSeconds(int timeoutSeconds) { this.timeoutSeconds = timeoutSeconds; } public ResultSerializer getJsonResultSerializer() { return jsonResultSerializer; } public void setJsonResultSerializer(ResultSerializer jsonResultSerializer) { this.jsonResultSerializer = jsonResultSerializer; } public ResultSerializer getXmlResultSerializer() { return xmlResultSerializer; } public void setXmlResultSerializer(ResultSerializer xmlResultSerializer) { this.xmlResultSerializer = xmlResultSerializer; } public List getIsvModules() { return isvModules; } public void setIsvModules(List isvModules) { this.isvModules = isvModules; } public boolean isIgnoreValidate() { return ignoreValidate; } public void setIgnoreValidate(boolean ignoreValidate) { this.ignoreValidate = ignoreValidate; } public RespWriter getRespWriter() { return respWriter; } public void setRespWriter(RespWriter respWriter) { this.respWriter = respWriter; } public String getOauth2LoginUri() { return oauth2LoginUri; } public void setOauth2LoginUri(String oauth2LoginUri) { this.oauth2LoginUri = oauth2LoginUri; } public long getOauth2ExpireIn() { return oauth2ExpireIn; } public void setOauth2ExpireIn(long oauth2ExpireIn) { this.oauth2ExpireIn = oauth2ExpireIn; } public Oauth2Service getOauth2Service() { return oauth2Service; } public void setOauth2Service(Oauth2Service oauth2Service) { this.oauth2Service = oauth2Service; } public Oauth2Manager getOauth2Manager() { return oauth2Manager; } public void setOauth2Manager(Oauth2Manager oauth2Manager) { this.oauth2Manager = oauth2Manager; } public int getJwtExpireIn() { return jwtExpireIn; } public void setJwtExpireIn(int jwtExpireIn) { this.jwtExpireIn = jwtExpireIn; } public JwtService getJwtService() { return jwtService; } public void setJwtService(JwtService jwtService) { jwtService.setApiConfig(this); this.jwtService = jwtService; } public Validator getValidator() { return validator; } public void setValidator(Validator validator) { validator.setApiConfig(this); this.validator = validator; } public Invoker getInvoker() { return invoker; } public void setInvoker(Invoker invoker) { invoker.setApiConfig(this); this.invoker = invoker; } public Signer getSigner() { return signer; } public void setSigner(Signer signer) { this.signer = signer; } public ApiInterceptor[] getInterceptors() { return interceptors; } public void setInterceptors(ApiInterceptor[] interceptors) { this.interceptors = interceptors; } public String getPrivateKey() { return privateKey; } public void setPrivateKey(String privateKey) { this.privateKey = privateKey; } public String getDefaultVersion() { return defaultVersion; } public void setDefaultVersion(String defaultVersion) { this.defaultVersion = defaultVersion; } public ParamParser getParamParser() { return paramParser; } public void setParamParser(ParamParser paramParser) { this.paramParser = paramParser; } public String getPriKeyPath() { return priKeyPath; } public void setPriKeyPath(String priKeyPath) { this.priKeyPath = priKeyPath; } public SessionManager getSessionManager() { return sessionManager; } public void setSessionManager(SessionManager sessionManager) { this.sessionManager = sessionManager; } public String getDocClassPath() { return docClassPath; } public void setDocClassPath(String docClassPath) { this.docClassPath = docClassPath; } public MonitorStore getMonitorStore() { return monitorStore; } public void setMonitorStore(MonitorStore monitorStore) { this.monitorStore = monitorStore; } public ApiInterceptor getMonitorInerceptor() { return monitorInerceptor; } public void setMonitorInerceptor(ApiInterceptor monitorInerceptor) { this.monitorInerceptor = monitorInerceptor; } public String getMonitorClassPath() { return monitorClassPath; } public void setMonitorClassPath(String monitorClassPath) { this.monitorClassPath = monitorClassPath; } public int getMonitorErrorQueueSize() { return monitorErrorQueueSize; } public void setMonitorErrorQueueSize(int monitorErrorQueueSize) { this.monitorErrorQueueSize = monitorErrorQueueSize; } public int getMonitorExecutorSize() { return monitorExecutorSize; } public void setMonitorExecutorSize(int monitorExecutorSize) { this.monitorExecutorSize = monitorExecutorSize; } public String getMonitorPassword() { return monitorPassword; } public void setMonitorPassword(String monitorPassword) { this.monitorPassword = monitorPassword; } public String getLoginClassPath() { return loginClassPath; } public void setLoginClassPath(String loginClassPath) { this.loginClassPath = loginClassPath; } public String getDocPassword() { return docPassword; } public void setDocPassword(String docPassword) { this.docPassword = docPassword; } public LimitManager getLimitManager() { return limitManager; } public void setLimitManager(LimitManager limitManager) { this.limitManager = limitManager; this.limitConfigManager = limitManager.getLimitConfigManager(); } public LimitConfigManager getLimitConfigManager() { return limitConfigManager; } public void setLimitConfigManager(LimitConfigManager limitConfigManager) { this.limitConfigManager = limitConfigManager; } public String getLimitClassPath() { return limitClassPath; } public void setLimitClassPath(String limitClassPath) { this.limitClassPath = limitClassPath; } public String getLimitPassword() { return limitPassword; } public void setLimitPassword(String limitPassword) { this.limitPassword = limitPassword; } public LimitType getDefaultLimitType() { return defaultLimitType; } public void setDefaultLimitType(LimitType defaultLimitType) { this.defaultLimitType = defaultLimitType; } public int getDefaultLimitCount() { return defaultLimitCount; } public void setDefaultLimitCount(int defaultLimitCount) { this.defaultLimitCount = defaultLimitCount; } public int getDefaultTokenBucketCount() { return defaultTokenBucketCount; } public void setDefaultTokenBucketCount(int defaultTokenBucketCount) { this.defaultTokenBucketCount = defaultTokenBucketCount; } public String getAppName() { return appName; } public PermissionManager getPermissionManager() { return permissionManager; } public void setPermissionManager(PermissionManager permissionManager) { this.permissionManager = permissionManager; } public String getLocalLimitConfigFile() { return localLimitConfigFile; } public void setLocalLimitConfigFile(String localLimitConfigFile) { this.localLimitConfigFile = localLimitConfigFile; } public String getLocalPermissionConfigFile() { return localPermissionConfigFile; } public void setLocalPermissionConfigFile(String localPermissionConfigFile) { this.localPermissionConfigFile = localPermissionConfigFile; } public ConfigClient getConfigClient() { return configClient; } public void setConfigClient(ConfigClient configClient) { this.configClient = configClient; } public String getLocalSecretConfigFile() { return localSecretConfigFile; } public void setLocalSecretConfigFile(String localSecretConfigFile) { this.localSecretConfigFile = localSecretConfigFile; } public String getDocPdfClassPath() { return docPdfClassPath; } public void setDocPdfClassPath(String docPdfClassPath) { this.docPdfClassPath = docPdfClassPath; } public String getDocPdfCssClassPath() { return docPdfCssClassPath; } public void setDocPdfCssClassPath(String docPdfCssClassPath) { this.docPdfCssClassPath = docPdfCssClassPath; } public Class getWrapperClass() { return wrapperClass; } public void setWrapperClass(Class wrapperClass) { this.wrapperClass = wrapperClass; } public DataDecoder getDataDecoder() { return dataDecoder; } public void setDataDecoder(DataDecoder dataDecoder) { this.dataDecoder = dataDecoder; } public String getJwtSecret() { return jwtSecret; } public void setJwtSecret(String jwtSecret) { this.jwtSecret = jwtSecret; } public ApiRegistEvent getApiRegistEvent() { return apiRegistEvent; } public void setApiRegistEvent(ApiRegistEvent apiRegistEvent) { this.apiRegistEvent = apiRegistEvent; } public void setApiName(String apiName) { ParamNames.API_NAME = apiName; } public void setVersionName(String versionName) { ParamNames.VERSION_NAME = versionName; } public void setAppKeyName(String appKeyName) { ParamNames.APP_KEY_NAME = appKeyName; } public void setDataName(String dataName) { ParamNames.DATA_NAME = dataName; } public void setTimestampName(String timestampName) { ParamNames.TIMESTAMP_NAME = timestampName; } public void setSignName(String signName) { ParamNames.SIGN_NAME = signName; } public String getMarkdownDocDir() { return markdownDocDir; } public void setMarkdownDocDir(String markdownDocDir) { this.markdownDocDir = markdownDocDir; } public DocFileCreator getDocFileCreator() { return docFileCreator; } public void setDocFileCreator(DocFileCreator docFileCreator) { this.docFileCreator = docFileCreator; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy