GatewayProcessor.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package gateway.processor;
  2. import com.yihu.hos.core.datatype.DateUtil;
  3. import com.yihu.hos.core.datatype.StringUtil;
  4. import org.apache.camel.Body;
  5. import org.apache.camel.Exchange;
  6. import org.apache.camel.Processor;
  7. import java.sql.Date;
  8. import java.util.Calendar;
  9. import java.util.HashMap;
  10. import java.util.Map;
  11. import java.util.stream.Collectors;
  12. import java.util.stream.Stream;
  13. public class GatewayProcessor implements Processor {
  14. public void process(Exchange exchange) throws Exception {
  15. }
  16. public String route(@Body String body) {
  17. Map<String, String> params = parseBody(body);
  18. boolean pass = checkParams(params);
  19. if (!pass) {
  20. return "jetty:http://0.0.0.0:9999/error/paramError"; //TODO:
  21. }
  22. pass = checkTimeStamp(params);
  23. if (!pass) {
  24. return "jetty:http://0.0.0.0:9999/error/outdataError"; //TODO:
  25. }
  26. pass = checkSign(params);
  27. if (pass) {
  28. return "jetty:http://0.0.0.0:9999/error/signValidError"; //TODO:
  29. }
  30. pass = checkAuthorized(params);
  31. if (pass) {
  32. return "jetty:http://0.0.0.0:9999/error/unauthorizedError"; //TODO:
  33. }
  34. String api = params.get("api");
  35. Map<String, String> apiRouters = new HashMap<>();
  36. if (api == null) {
  37. System.out.println("api参数为null");
  38. } else if (api.equals("secret")) {
  39. apiRouters.put("secret", "restlet:http://sdw2:10000/api/v1.0/admin/apps/Y3hpgpMRyI");
  40. } else {
  41. return null;
  42. }
  43. return apiRouters.get(api);
  44. }
  45. private boolean checkParams(Map<String, String> params) {
  46. String api = params.get("api"); // API接口名称
  47. String sign = params.get("sign"); // 簽名
  48. String timestamp = params.get("timestamp"); // 时间戳
  49. String appKey = params.get("appKey"); // HOP分配给应用的AppKey ,创建应用时可获得
  50. String version = params.get("v"); // API协议版本
  51. return !(StringUtil.isEmpty(api) || StringUtil.isEmpty(timestamp)
  52. || StringUtil.isEmpty(appKey) || StringUtil.isEmpty(version)
  53. || StringUtil.isEmpty(sign));
  54. }
  55. private boolean checkTimeStamp(Map<String, String> params) {
  56. final long ONE_MIN = 60000; //millisecond
  57. String timestamp = params.get("timestamp");
  58. Date ts = DateUtil.toDateFromTime(timestamp);
  59. if (ts == null){
  60. return false; //时间格式不正确
  61. }
  62. Calendar date = Calendar.getInstance();
  63. long timeInMillis = date.getTimeInMillis();
  64. Date min = new Date(timeInMillis - 5 * ONE_MIN);
  65. Date max = new Date(timeInMillis + 5 * ONE_MIN);
  66. return ts.after(min) && ts.before(max);
  67. }
  68. private boolean checkSign(Map<String, String> params) {
  69. try {
  70. String sign = params.get("sign"); // 簽名
  71. ParamVerifyBean paramSign = new ParamVerifyBean();
  72. paramSign.addParam(params);
  73. paramSign.genParam();
  74. String md5Sign = paramSign.signParam();
  75. if (!md5Sign.equals(sign)) {
  76. System.out.println("传递的签名:" + sign);
  77. System.out.println("生成的签名:" + md5Sign);
  78. return false;
  79. }
  80. return true;
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. return false;
  84. }
  85. }
  86. private boolean checkAuthorized(Map<String, String> params) {
  87. return true;
  88. }
  89. private Map<String, String> parseBody(String body) {
  90. return Stream.of(body.split("&")).map(obj -> obj.split("="))
  91. .collect(Collectors.toMap(entry -> entry[0], entry -> entry[1]));
  92. }
  93. }