123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package gateway.processor;
- import com.yihu.hos.core.datatype.DateUtil;
- import com.yihu.hos.core.datatype.StringUtil;
- import org.apache.camel.Body;
- import org.apache.camel.Exchange;
- import org.apache.camel.Processor;
- import java.sql.Date;
- import java.util.Calendar;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
- public class GatewayProcessor implements Processor {
- public void process(Exchange exchange) throws Exception {
- }
- public String route(@Body String body) {
- Map<String, String> params = parseBody(body);
- boolean pass = checkParams(params);
- if (!pass) {
- return "jetty:http://0.0.0.0:9999/error/paramError"; //TODO:
- }
- pass = checkTimeStamp(params);
- if (!pass) {
- return "jetty:http://0.0.0.0:9999/error/outdataError"; //TODO:
- }
- pass = checkSign(params);
- if (pass) {
- return "jetty:http://0.0.0.0:9999/error/signValidError"; //TODO:
- }
- pass = checkAuthorized(params);
- if (pass) {
- return "jetty:http://0.0.0.0:9999/error/unauthorizedError"; //TODO:
- }
- String api = params.get("api");
- Map<String, String> apiRouters = new HashMap<>();
- if (api == null) {
- System.out.println("api参数为null");
- } else if (api.equals("secret")) {
- apiRouters.put("secret", "restlet:http://sdw2:10000/api/v1.0/admin/apps/Y3hpgpMRyI");
- } else {
- return null;
- }
- return apiRouters.get(api);
- }
- private boolean checkParams(Map<String, String> params) {
- String api = params.get("api"); // API接口名称
- String sign = params.get("sign"); // 簽名
- String timestamp = params.get("timestamp"); // 时间戳
- String appKey = params.get("appKey"); // HOP分配给应用的AppKey ,创建应用时可获得
- String version = params.get("v"); // API协议版本
- return !(StringUtil.isEmpty(api) || StringUtil.isEmpty(timestamp)
- || StringUtil.isEmpty(appKey) || StringUtil.isEmpty(version)
- || StringUtil.isEmpty(sign));
- }
- private boolean checkTimeStamp(Map<String, String> params) {
- final long ONE_MIN = 60000; //millisecond
- String timestamp = params.get("timestamp");
- Date ts = DateUtil.toDateFromTime(timestamp);
- if (ts == null){
- return false; //时间格式不正确
- }
- Calendar date = Calendar.getInstance();
- long timeInMillis = date.getTimeInMillis();
- Date min = new Date(timeInMillis - 5 * ONE_MIN);
- Date max = new Date(timeInMillis + 5 * ONE_MIN);
- return ts.after(min) && ts.before(max);
- }
- private boolean checkSign(Map<String, String> params) {
- try {
- String sign = params.get("sign"); // 簽名
- ParamVerifyBean paramSign = new ParamVerifyBean();
- paramSign.addParam(params);
- paramSign.genParam();
- String md5Sign = paramSign.signParam();
- if (!md5Sign.equals(sign)) {
- System.out.println("传递的签名:" + sign);
- System.out.println("生成的签名:" + md5Sign);
- return false;
- }
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
- private boolean checkAuthorized(Map<String, String> params) {
- return true;
- }
- private Map<String, String> parseBody(String body) {
- return Stream.of(body.split("&")).map(obj -> obj.split("="))
- .collect(Collectors.toMap(entry -> entry[0], entry -> entry[1]));
- }
- }
|