From f8dcfe3d26eccf317ceda3bbeb99ad613cc6081a Mon Sep 17 00:00:00 2001 From: wangbing Date: Fri, 13 Mar 2020 15:15:01 +0800 Subject: [PATCH] 111 --- .../com/example/action/AjaxController.java | 81 ++++---- .../com/example/config/SecurityConfig.java | 2 +- .../java/com/example/config/SqliteConfig.java | 7 - .../com/example/module/admin/ent/Mapping.java | 14 +- .../com/example/module/admin/ent/Service.java | 77 -------- .../module/admin/mgr/MappingManagerImpl.java | 18 +- .../admin/req/MappingCreateRequest.java | 13 +- .../module/admin/req/MappingFindRequest.java | 13 +- .../module/admin/rsp/PortLoadResponse.java | 8 - admin/src/main/resources/static/js/ajax.js | 12 +- .../main/resources/templates/nginx.conf.ftl | 6 +- .../resources/templates/screen/mapping.ftl | 185 +++++++++--------- .../main/java/xyz/wbsite/wsqlite/Where.java | 6 +- 13 files changed, 181 insertions(+), 261 deletions(-) delete mode 100644 admin/src/main/java/com/example/module/admin/ent/Service.java delete mode 100644 admin/src/main/java/com/example/module/admin/rsp/PortLoadResponse.java diff --git a/admin/src/main/java/com/example/action/AjaxController.java b/admin/src/main/java/com/example/action/AjaxController.java index 4ffeb47..1589ae7 100644 --- a/admin/src/main/java/com/example/action/AjaxController.java +++ b/admin/src/main/java/com/example/action/AjaxController.java @@ -4,14 +4,23 @@ import com.example.frame.base.BaseResponse; import com.example.frame.base.Error; import com.example.frame.base.ErrorType; import com.example.frame.base.Token; -import com.example.frame.utils.*; +import com.example.frame.utils.LocalData; +import com.example.frame.utils.LogUtil; +import com.example.frame.utils.MD5Util; +import com.example.frame.utils.MapperUtil; +import com.example.frame.utils.Message; +import com.example.frame.utils.ProcessUtil; +import com.example.frame.utils.ValidationUtil; +import com.example.module.admin.ent.Mapping; import com.example.module.admin.ent.NginxCtrl; -import com.example.module.admin.ent.Service; import com.example.module.admin.mgr.MappingManager; -import com.example.module.admin.req.*; +import com.example.module.admin.req.LoginRequest; +import com.example.module.admin.req.MappingCreateRequest; +import com.example.module.admin.req.MappingDeleteRequest; +import com.example.module.admin.req.MappingFindRequest; +import com.example.module.admin.req.MappingUpdateRequest; import com.example.module.admin.rsp.LoginResponse; import com.example.module.admin.rsp.MappingFindResponse; -import com.example.module.admin.rsp.PortLoadResponse; import freemarker.template.Template; import freemarker.template.TemplateException; import org.springframework.beans.factory.annotation.Autowired; @@ -22,17 +31,23 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import xyz.wbsite.wsqlite.ObjectClient; -import xyz.wbsite.wsqlite.Where; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.sql.SQLException; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Map; @Controller public class AjaxController { @@ -87,6 +102,9 @@ public class AjaxController { case "nginx.reload": baseResponse = nginxReload(jsonString, token); break; + case "ajax.admin.mapping.find": + baseResponse = findMapping(jsonString, token); + break; // 创建映射 case "ajax.admin.mapping.create": baseResponse = createMapping(jsonString, token); @@ -102,9 +120,6 @@ public class AjaxController { baseResponse = updateMapping(jsonString, token); flushConfig(); break; - case "ajax.admin.service.load": - baseResponse = loadPort(jsonString, token); - break; case "ajax.admin.config.flush": flushConfig(); baseResponse = new BaseResponse(); @@ -214,39 +229,31 @@ public class AjaxController { return mappingManager.find(request, token); } - private BaseResponse loadPort(String jsonString, Token token) { - PortLoadResponse response = new PortLoadResponse(); - try { - List select = objectClient.select(Service.class, Where.builder().build(), 1, 0); - - for (Service service : select) { - MappingFindRequest mappingFindRequest = new MappingFindRequest(); - mappingFindRequest.setServiceId(service.getId()); - mappingFindRequest.setPageSize(0); - MappingFindResponse mappingFindResponse = mappingManager.find(mappingFindRequest, token); - if (mappingFindResponse.hasError()) { - response.addErrors(mappingFindResponse.getErrors()); - return response; - } - service.setMappingList(mappingFindResponse.getResult()); - } - response.setResult(select); - } catch (SQLException | ClassNotFoundException e) { - e.printStackTrace(); - response.addError(ErrorType.BUSINESS_ERROR, "配置加载错误"); - return response; - } - return response; - } - private synchronized void flushConfig() { Writer wr = null; try { File config = nginxCtrl.getConfig(); HashMap context = new HashMap<>(); - PortLoadResponse portLoadResponse = (PortLoadResponse) loadPort("", LocalData.getSysToken()); - context.put("services", portLoadResponse.getResult()); + MappingFindRequest mappingFindRequest = new MappingFindRequest(); + mappingFindRequest.setPageSize(0); + mappingFindRequest.setSortKey("SERVICE_PORT"); + MappingFindResponse mappingFindResponse = mappingManager.find(mappingFindRequest, LocalData.getSysToken()); + + Map> services = new HashMap<>(); + + for (Mapping mapping : mappingFindResponse.getResult()) { + + List mappings = services.get(mapping.getServicePort()); + + if (mappings == null) { + mappings = new ArrayList<>(); + services.put(mapping.getServicePort(), mappings); + } + mappings.add(mapping); + } + + context.put("services", services); Template template = freeMarkerConfigurer.getConfiguration().getTemplate("nginx.conf.ftl"); wr = new OutputStreamWriter(new FileOutputStream(config), "UTF-8"); //写入 diff --git a/admin/src/main/java/com/example/config/SecurityConfig.java b/admin/src/main/java/com/example/config/SecurityConfig.java index 4ae3c73..da51b8e 100644 --- a/admin/src/main/java/com/example/config/SecurityConfig.java +++ b/admin/src/main/java/com/example/config/SecurityConfig.java @@ -88,10 +88,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { token1.putResource("nginx.start"); token1.putResource("nginx.stop"); token1.putResource("nginx.reload"); + token1.putResource("ajax.admin.mapping.find"); token1.putResource("ajax.admin.mapping.create"); token1.putResource("ajax.admin.mapping.delete"); token1.putResource("ajax.admin.mapping.update"); - token1.putResource("ajax.admin.service.load"); token1.putResource("ajax.admin.config.flush"); LocalData.setToken(token1); } diff --git a/admin/src/main/java/com/example/config/SqliteConfig.java b/admin/src/main/java/com/example/config/SqliteConfig.java index 0121aad..bf558a6 100644 --- a/admin/src/main/java/com/example/config/SqliteConfig.java +++ b/admin/src/main/java/com/example/config/SqliteConfig.java @@ -2,7 +2,6 @@ package com.example.config; import com.example.frame.utils.IDgenerator; import com.example.module.admin.ent.Mapping; -import com.example.module.admin.ent.Service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.system.ApplicationHome; import org.springframework.context.annotation.Bean; @@ -37,14 +36,8 @@ public class SqliteConfig { ArrayList objects = new ArrayList<>(); objects.add(Mapping.class); - objects.add(Service.class); ObjectClient objectClient = new ObjectClient(new File(dbpath, "data.db"), objects); - List select = objectClient.select(Service.class, Where.builder().build(),1, 1); - if (select.size() == 0 && objectClient.insert(Service.class, new Service(IDgenerator.nextId(), "8888", "默认端口")) != 1) { - throw new RuntimeException("Nginx default port 8888 init failed."); - } - return objectClient; } catch (ClassNotFoundException e) { e.printStackTrace(); diff --git a/admin/src/main/java/com/example/module/admin/ent/Mapping.java b/admin/src/main/java/com/example/module/admin/ent/Mapping.java index 249ff87..821bb51 100644 --- a/admin/src/main/java/com/example/module/admin/ent/Mapping.java +++ b/admin/src/main/java/com/example/module/admin/ent/Mapping.java @@ -19,12 +19,8 @@ public class Mapping { */ @TableField private Long id; - - /** - * ID - 端口ID - */ @TableField - private Long serviceId; + private String servicePort; @TableField private String name; @TableField @@ -48,12 +44,12 @@ public class Mapping { this.type = type; } - public Long getServiceId() { - return serviceId; + public String getServicePort() { + return servicePort; } - public void setServiceId(Long serviceId) { - this.serviceId = serviceId; + public void setServicePort(String servicePort) { + this.servicePort = servicePort; } public String getName() { diff --git a/admin/src/main/java/com/example/module/admin/ent/Service.java b/admin/src/main/java/com/example/module/admin/ent/Service.java deleted file mode 100644 index a04b3b2..0000000 --- a/admin/src/main/java/com/example/module/admin/ent/Service.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.example.module.admin.ent; - -import xyz.wbsite.wsqlite.anonation.TableField; - -import java.util.Date; -import java.util.List; - -/** - * MAPPING - 映射 - * - * @author author - * @version 0.0.1 - * @since 2019-09-28 - */ -public class Service { - - /** - * VALUE - 端口ID - */ - @TableField - private Long id; - - /** - * VALUE - 端口值 - */ - @TableField - private String value; - - /** - * VALUE - 备注 - */ - @TableField - private String bz; - - private List mappingList; - - public List getMappingList() { - return mappingList; - } - - public void setMappingList(List mappingList) { - this.mappingList = mappingList; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getBz() { - return bz; - } - - public void setBz(String bz) { - this.bz = bz; - } - - public Service() { - } - - public Service(Long id, String value, String bz) { - this.id = id; - this.value = value; - this.bz = bz; - } -} \ No newline at end of file diff --git a/admin/src/main/java/com/example/module/admin/mgr/MappingManagerImpl.java b/admin/src/main/java/com/example/module/admin/mgr/MappingManagerImpl.java index d5ec10d..c8a5e0c 100644 --- a/admin/src/main/java/com/example/module/admin/mgr/MappingManagerImpl.java +++ b/admin/src/main/java/com/example/module/admin/mgr/MappingManagerImpl.java @@ -1,9 +1,8 @@ package com.example.module.admin.mgr; -import com.example.frame.utils.IDgenerator; -import com.example.frame.utils.Message; import com.example.frame.base.ErrorType; import com.example.frame.base.Token; +import com.example.frame.utils.IDgenerator; import com.example.frame.utils.MapperUtil; import com.example.frame.utils.ValidationUtil; import com.example.module.admin.ent.Mapping; @@ -52,6 +51,21 @@ public class MappingManagerImpl implements MappingManager { return response; } + try { + Where where = Where.builder().eq("SERVICEPORT", request.getServicePort()).eq("CONTEXT", request.getContext()).build(); + List select = objectClient.select(Mapping.class, where, 1, 0); + + if (select.size() > 0) { + response.addError(ErrorType.BUSINESS_ERROR, request.getServicePort() + ":" + request.getContext() + "已经被占用"); + return response; + } + + } catch (SQLException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + long id = IDgenerator.nextId(); Mapping entity = MapperUtil.map(request, Mapping.class); entity.setId(id); diff --git a/admin/src/main/java/com/example/module/admin/req/MappingCreateRequest.java b/admin/src/main/java/com/example/module/admin/req/MappingCreateRequest.java index b3ccba2..5f80842 100644 --- a/admin/src/main/java/com/example/module/admin/req/MappingCreateRequest.java +++ b/admin/src/main/java/com/example/module/admin/req/MappingCreateRequest.java @@ -21,8 +21,9 @@ public class MappingCreateRequest extends BaseRequest { @NotNull(message = "映射名称不能为空") private String name; - @NotNull(message = "服务Id不能为空") - private Long serviceId; + @NotNull(message = "服务端口不能为空") + @Pattern(regexp = "^[0-9]*$", message = "服务端口必须是数字") + private String servicePort; @NotNull(message = "映射路径不能为空") @Pattern(regexp = "^/[a-zA-Z][a-zA-Z0-9_-]*$|^[A-Z]:/.*$|^/$", message = "映射路径须是(/)或(/+字母+字母数字及_") @@ -36,12 +37,12 @@ public class MappingCreateRequest extends BaseRequest { private String bz; - public Long getServiceId() { - return serviceId; + public String getServicePort() { + return servicePort; } - public void setServiceId(Long serviceId) { - this.serviceId = serviceId; + public void setServicePort(String servicePort) { + this.servicePort = servicePort; } public String getName() { diff --git a/admin/src/main/java/com/example/module/admin/req/MappingFindRequest.java b/admin/src/main/java/com/example/module/admin/req/MappingFindRequest.java index 7ef5704..049846c 100644 --- a/admin/src/main/java/com/example/module/admin/req/MappingFindRequest.java +++ b/admin/src/main/java/com/example/module/admin/req/MappingFindRequest.java @@ -11,16 +11,13 @@ import com.example.frame.base.BaseFindRequest; */ public class MappingFindRequest extends BaseFindRequest { - /** - * 用户名 - */ - private Long serviceId; + private String search; - public Long getServiceId() { - return serviceId; + public String getSearch() { + return search; } - public void setServiceId(Long serviceId) { - this.serviceId = serviceId; + public void setSearch(String search) { + this.search = search; } } diff --git a/admin/src/main/java/com/example/module/admin/rsp/PortLoadResponse.java b/admin/src/main/java/com/example/module/admin/rsp/PortLoadResponse.java deleted file mode 100644 index 006c03c..0000000 --- a/admin/src/main/java/com/example/module/admin/rsp/PortLoadResponse.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.module.admin.rsp; - - -import com.example.frame.base.BaseFindResponse; -import com.example.module.admin.ent.Service; - -public class PortLoadResponse extends BaseFindResponse { -} \ No newline at end of file diff --git a/admin/src/main/resources/static/js/ajax.js b/admin/src/main/resources/static/js/ajax.js index 0654fe3..dfd3942 100644 --- a/admin/src/main/resources/static/js/ajax.js +++ b/admin/src/main/resources/static/js/ajax.js @@ -128,6 +128,12 @@ window.ajax = { data: fd }) }, + mappingFind: function (data) { + return jsonRequest({ + method:"ajax.admin.mapping.find", + data: JSON.stringify(data), + }) + }, mappingCreate: function (data) { return jsonRequest({ method:"ajax.admin.mapping.create", @@ -146,12 +152,6 @@ window.ajax = { data: JSON.stringify(data), }) }, - serviceLoad: function(data) { - return jsonRequest({ - method:"ajax.admin.service.load", - data: JSON.stringify(data), - }) - }, configFlush: function(data) { return jsonRequest({ method:"ajax.admin.config.flush", diff --git a/admin/src/main/resources/templates/nginx.conf.ftl b/admin/src/main/resources/templates/nginx.conf.ftl index a16901d..5e3c8e1 100644 --- a/admin/src/main/resources/templates/nginx.conf.ftl +++ b/admin/src/main/resources/templates/nginx.conf.ftl @@ -31,17 +31,17 @@ http { keepalive_timeout 65; #gzip on; -<#list services as item> +<#list services.keySet() as key> server { - listen ${item.value}; + listen ${key}; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; -<#list item.mappingList as mapping> +<#list services[key] as mapping> <#if mapping.type="HTTP"> location ${mapping.context} { proxy_pass ${mapping.location}; diff --git a/admin/src/main/resources/templates/screen/mapping.ftl b/admin/src/main/resources/templates/screen/mapping.ftl index dbfc922..82954b9 100644 --- a/admin/src/main/resources/templates/screen/mapping.ftl +++ b/admin/src/main/resources/templates/screen/mapping.ftl @@ -33,93 +33,80 @@ + + + + 新增 + + + + + - - - - - - - - - - - - - - 保存 - - - - 新增 + + + + + + + + + + + + + + + + + + + + + + + + + + - + - HTTP @@ -212,6 +205,9 @@ var app = new Vue({ el: "#app", data: { + vm: { + search: "" + }, form: { title: "", dialog: false, @@ -227,6 +223,10 @@ {required: true, message: '映射名称不能为空', trigger: 'blur'}, {min: 1, max: 50, message: '长度在 1 到 50 字符', trigger: 'blur'} ], + servicePort: [ + {required: true, message: '映射端口不能为空', trigger: 'blur'}, + {pattern: "^[0-9]*$", message: '映射端口只能为数字', trigger: 'blur'}, + ], context: [ {required: true, message: '映射路径不能为空', trigger: 'blur'}, {pattern: "^/[a-zA-Z][a-zA-Z0-9_-]*$|^/$", message: '上下文须是(/)或(/+字母+字母数字及_', trigger: 'blur'}, @@ -253,19 +253,16 @@ } ], }, - services: [], + result: [], run: ${run?default('false')} }, methods: { onFind: function () { - ajax.serviceLoad().then(function (response) { + ajax.mappingFind(this.vm).then(function (response) { if (response.errors.length > 0) { nav.e(response.errors[0].message); } else { - for (var i in response.result) { - response.result[i].search = ""; - } - this.services = response.result; + this.result = response.result; } }.bind(this)) }, @@ -274,7 +271,7 @@ switch (action) { case "create": this.form.title = '新增'; - this.form.serviceId = arg[1].id; + this.form.servicePoert = "8080"; this.form.port = arg[1].value; this.form.id = ''; this.form.name = ''; diff --git a/wsqlite/src/main/java/xyz/wbsite/wsqlite/Where.java b/wsqlite/src/main/java/xyz/wbsite/wsqlite/Where.java index 34effa6..bb46f8b 100644 --- a/wsqlite/src/main/java/xyz/wbsite/wsqlite/Where.java +++ b/wsqlite/src/main/java/xyz/wbsite/wsqlite/Where.java @@ -65,7 +65,7 @@ public class Where { public Builder like(boolean condition, String name, Object value) { if (condition) { - sb.append(sb.length() > 0 ? " and " : " where ").append(name).append("like ?"); + sb.append(sb.length() > 0 ? " and " : " where ").append(name).append(" like ?"); argsList.add(value); } return this; @@ -73,7 +73,7 @@ public class Where { public Builder isNull(boolean condition, String name, Object value) { if (condition) { - sb.append(sb.length() > 0 ? " and " : " where ").append(name).append("is null"); + sb.append(sb.length() > 0 ? " and " : " where ").append(name).append(" is null"); argsList.add(value); } return this; @@ -81,7 +81,7 @@ public class Where { public Builder isNotNull(boolean condition, String name, Object value) { if (condition) { - sb.append(sb.length() > 0 ? " and " : " where ").append(name).append("is not null"); + sb.append(sb.length() > 0 ? " and " : " where ").append(name).append(" is not null"); argsList.add(value); } return this;