com.gitee.easyopen.ApiConfig Maven / Gradle / Ivy
package com.gitee.easyopen;
import com.gitee.easyopen.doc.DocFileCreator;
import com.gitee.easyopen.exception.DefaultEasyopenExceptionHandler;
import com.gitee.easyopen.exception.EasyopenExceptionHandler;
import com.gitee.easyopen.interceptor.ApiInterceptor;
import com.gitee.easyopen.jwt.JwtService;
import com.gitee.easyopen.jwt.impl.JwtServiceImpl;
import com.gitee.easyopen.serializer.JsonResultSerializer;
import com.gitee.easyopen.session.ApiSessionManager;
import com.gitee.easyopen.session.SessionManager;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
/**
* 配置类,所有配置相关都在这里.
*
* @author tanghc
*/
@Data
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();
/**
* 签名工具
*/
private Signer signer = new ApiSigner();
private RespWriter respWriter = new ApiRespWriter();
/**
* 参数解析
*/
private ParamParser paramParser = new ApiParamParser();
/**
* session管理
*/
private SessionManager sessionManager = new ApiSessionManager();
/**
* 拦截器
*/
private ApiInterceptor[] interceptors = {};
/**
* 错误模块
*/
private List isvModules = new ArrayList();
/**
* data部分解码
*/
private DataDecoder dataDecoder = new ApiDataDecoder();
/**
* api注册事件
*/
private ApiRegistEvent apiRegistEvent = apiDefinition -> {
};
/* ************在构造方法中初始化************ */
/**
* 校验接口
*/
private Validator validator = new ApiValidator();
/**
* JWT处理
*/
private JwtService jwtService = new JwtServiceImpl();
/**
* 请求转发
*/
private Invoker invoker = new ApiInvoker();
private DocFileCreator docFileCreator;
private EasyopenExceptionHandler exceptionHandler = new DefaultEasyopenExceptionHandler();
/* ***************************** */
/**
* 默认版本号
*/
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 loginClassPath = "/easyopen_template/login.html";
/**
* 忽略验证
*/
private boolean ignoreValidate;
/**
* 登录视图页面用于,mvc视图,如:loginView
*/
private String oauth2LoginUri = "/oauth2login";
/**
* oauth2的accessToken过期时间,单位秒,默认2小时
*/
private long oauth2ExpireIn = 7200;
/**
* jwt过期时间,秒,默认2小时
*/
private int jwtExpireIn = 7200;
/**
* 最外包装类class
*/
private Class extends Result> wrapperClass;
/**
* jwt对应的secret
*/
private String jwtSecret = "#56gu25@41tCVr]>0$";
/**
* markdown文档保存目录
*/
private String markdownDocDir;
public ApiConfig() {
isvModules.add("i18n/isv/error");
}
/**
* 开启app对接模式,开启后不进行timeout校验。
* 如果平台直接跟Android或IOS对接,可开启这个功能。因为手机上的时间有可能跟服务端的时间不一致(用户的手机情况不可控)。
* 失去了时间校验,一个请求有可能被反复调用,服务端需要防止重复提交,有必要的话上HTTPS。
*/
public void openAppMode() {
this.timeoutSeconds = 0;
}
/**
* 添加秘钥配置,map中存放秘钥信息,key对应appKey,value对应secret
*
* @param appSecretStore
*/
public void addAppSecret(Map appSecretStore) {
this.appSecretManager.addAppSecret(appSecretStore);
}
}