RouteEndPoint.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package com.yihu.base.router;
  2. import com.alibaba.fastjson.JSON;
  3. import com.yihu.base.router.model.Ratelimit;
  4. import com.yihu.base.router.model.RuleRoute;
  5. import com.yihu.base.router.ratelimit.storage.IRateLimitStorage;
  6. import com.yihu.base.router.rule.storage.IRuleStorage;
  7. import io.swagger.annotations.ApiOperation;
  8. import io.swagger.annotations.ApiParam;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.util.StringUtils;
  11. import org.springframework.web.bind.annotation.*;
  12. import java.text.SimpleDateFormat;
  13. import java.util.Date;
  14. import java.util.List;
  15. import java.util.Random;
  16. import java.util.UUID;
  17. /**
  18. * Created by chenweida on 2018/4/27 0027.
  19. * 路由规则端点
  20. */
  21. @RestController
  22. @RequestMapping("/route")
  23. public class RouteEndPoint {
  24. @Autowired
  25. private IRuleStorage ruleStorage;
  26. @Autowired
  27. private IRateLimitStorage rateLimitStorage;
  28. @Autowired
  29. private RefreshRouteService refreshRouteService;
  30. @PostMapping(value = "/rule/save")
  31. @ApiOperation(value = "新增路由规则", notes = "")
  32. public String saveRule(
  33. @ApiParam(name = "id", value = "主键", required = true) @RequestParam(required = true, name = "id") String id,
  34. @ApiParam(name = "path", value = "网关暴露出去的路径 例:/v1/simple2/**", required = true) @RequestParam(required = true, name = "path") String path,
  35. @ApiParam(name = "serviceId", value = "注册到微服务的Id", required = false) @RequestParam(required = false, name = "serviceId") String serviceId,
  36. @ApiParam(name = "url", value = "跳转的路径 例:http://localhost:10010/", required = false) @RequestParam(required = false, name = "url") String url,
  37. @ApiParam(name = "retryable", value = "失败是否重试 ", required = false) @RequestParam(required = false, name = "retryable", defaultValue = "true") Boolean retryable,
  38. @ApiParam(name = "enabled", value = "是否有用", required = false) @RequestParam(required = false, name = "enabled", defaultValue = "true") Boolean enabled
  39. ) {
  40. RuleRoute ruleRoute = new RuleRoute();
  41. ruleRoute.setId(id);
  42. ruleRoute.setEnabled(enabled);
  43. ruleRoute.setPath(path);
  44. ruleRoute.setServiceId(serviceId);
  45. ruleRoute.setRetryable(retryable);
  46. ruleRoute.setUrl(url);
  47. ruleStorage.saveRuleStorage(ruleRoute);
  48. return "成功";
  49. }
  50. @PostMapping(value = "/rule/update")
  51. @ApiOperation(value = "修改路由规则", notes = "")
  52. public String updateRule(
  53. @ApiParam(name = "id", value = "主键", required = true) @RequestParam(required = true, name = "id") String id,
  54. @ApiParam(name = "path", value = "网关暴露出去的路径 例:/v1/simple2/**", required = true) @RequestParam(required = true, name = "path") String path,
  55. @ApiParam(name = "serviceId", value = "注册到微服务的Id", required = false) @RequestParam(required = false, name = "serviceId") String serviceId,
  56. @ApiParam(name = "url", value = "跳转的路径 例:http://localhost:10010/", required = false) @RequestParam(required = false, name = "url") String url,
  57. @ApiParam(name = "retryable", value = "失败是否重试 ", required = false) @RequestParam(required = false, name = "retryable", defaultValue = "true") Boolean retryable,
  58. @ApiParam(name = "enabled", value = "是否有用", required = false) @RequestParam(required = false, name = "enabled", defaultValue = "true") Boolean enabled
  59. ) {
  60. RuleRoute ruleRoute = ruleStorage.getRuleStorageById(id);
  61. if (!StringUtils.isEmpty(path)) {
  62. ruleRoute.setPath(path);
  63. }
  64. if (!StringUtils.isEmpty(path)) {
  65. ruleRoute.setServiceId(serviceId);
  66. }
  67. if (!StringUtils.isEmpty(path)) {
  68. ruleRoute.setRetryable(retryable);
  69. }
  70. if (!StringUtils.isEmpty(path)) {
  71. ruleRoute.setEnabled(enabled);
  72. }
  73. if (!StringUtils.isEmpty(path)) {
  74. ruleRoute.setUrl(url);
  75. }
  76. ruleStorage.updateRuleStorage(ruleRoute);
  77. return "成功";
  78. }
  79. @DeleteMapping(value = "/rule/delete")
  80. @ApiOperation(value = "删除路由规则", notes = "")
  81. public String saveRule(
  82. @ApiParam(name = "id", value = "主键", required = true) @RequestParam(required = true, name = "id") String id
  83. ) {
  84. ruleStorage.deleteRuleStorageById(id);
  85. return "成功";
  86. }
  87. @PostMapping(value = "/rule/refresh")
  88. @ApiOperation(value = "刷新路由列表", notes = "")
  89. public String refresh(
  90. ) {
  91. refreshRouteService.refreshRoute();
  92. return "成功";
  93. }
  94. /**
  95. * @return
  96. */
  97. @PostMapping(value = "/rule/exportAll")
  98. @ApiOperation(value = "导出路由列表", notes = "")
  99. public List<RuleRoute> export(
  100. ) {
  101. return ruleStorage.listRuleStorage();
  102. }
  103. /**
  104. * @return
  105. */
  106. @PostMapping(value = "/rule/importAll")
  107. @ApiOperation(value = "导出路由列表", notes = "")
  108. public String importAll(
  109. @ApiParam(name = "jsonData", value = " 路由列表list", defaultValue = "")
  110. @RequestBody String jsonData
  111. ) {
  112. try {
  113. List<RuleRoute> ruleRoutes = JSON.parseArray(jsonData, RuleRoute.class);
  114. for (int i = 0; i < ruleRoutes.size(); i++) {
  115. ruleStorage.saveRuleStorage(ruleRoutes.get(i));
  116. }
  117. return "成功";
  118. } catch (Exception e) {
  119. return e.getMessage();
  120. }
  121. }
  122. @PostMapping(value = "/ratelimit/save")
  123. @ApiOperation(value = "新增路由限制规则", notes = "")
  124. public String saveRule(
  125. @ApiParam(name = "id", value = "主键", required = true) @RequestParam(required = true, name = "id") String id,
  126. @ApiParam(name = "excludeIp", value = "ip地址", required = false) @RequestParam(required = false, name = "excludeIp") String excludeIp,
  127. @ApiParam(name = "includeIp", value = "ip地址", required = false) @RequestParam(required = false, name = "includeIp") String includeIp,
  128. @ApiParam(name = "path", value = "限制访问的路径", required = false) @RequestParam(required = false, name = "path") String path,
  129. @ApiParam(name = "accessCount", value = "次数", required = false) @RequestParam(required = false, name = "accessCount",defaultValue = "0") Integer accessCount,
  130. @ApiParam(name = "accessUnit", value = "访问的次数限制单位 默认是分钟 1秒 2 分钟 3小时 4天 结合accessCount使用 ", required = false) @RequestParam(required = false, name = "accessUnit",defaultValue = "2") String accessUnit
  131. ) {
  132. Ratelimit ratelimit=new Ratelimit();
  133. ratelimit.setId(id);
  134. ratelimit.setAccessCount(accessCount);
  135. ratelimit.setAccessUnit(accessUnit);
  136. ratelimit.setExcludeIp(excludeIp);
  137. ratelimit.setIncludeIp(includeIp);
  138. ratelimit.setPath(path);
  139. rateLimitStorage.saveRateLimit(ratelimit);
  140. return "成功";
  141. }
  142. @DeleteMapping(value = "/ratelimit/delete")
  143. @ApiOperation(value = "删除路由限制规则", notes = "")
  144. public String deleteRule(
  145. @ApiParam(name = "id", value = "主键", required = true) @RequestParam(required = true, name = "id") String id
  146. ) {
  147. rateLimitStorage.deleteRateLimitById(id);
  148. return "成功";
  149. }
  150. /**
  151. * @return
  152. */
  153. @PostMapping(value = "/ratelimit/exportAll")
  154. @ApiOperation(value = "导出路由拦截规则列表", notes = "")
  155. public List<Ratelimit> ratelimitExport(
  156. ) {
  157. return rateLimitStorage.findAllRatelimit();
  158. }
  159. /**
  160. * @return
  161. */
  162. @PostMapping(value = "/ratelimit/importAll")
  163. @ApiOperation(value = "导出路由拦截规则列表", notes = "")
  164. public String ratelimitImportAll(
  165. @ApiParam(name = "jsonData", value = " 路由列表list", defaultValue = "")
  166. @RequestBody String jsonData
  167. ) {
  168. try {
  169. List<Ratelimit> ratelimits = JSON.parseArray(jsonData, Ratelimit.class);
  170. for (int i = 0; i < ratelimits.size(); i++) {
  171. rateLimitStorage.saveRateLimit(ratelimits.get(i));
  172. }
  173. return "成功";
  174. } catch (Exception e) {
  175. return e.getMessage();
  176. }
  177. }
  178. }