From 98e79619772e0907e508f2c32c630172dd19ea53 Mon Sep 17 00:00:00 2001 From: noear Date: Wed, 13 Nov 2024 00:00:06 +0800 Subject: [PATCH 1/3] =?UTF-8?q?solon=20=E5=8D=87=E4=B8=BA=203.0.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 50 ++++++------------- src/main/java/com/cym/NginxWebUI.java | 17 +------ src/main/java/com/cym/config/AppFilter.java | 32 ++++++------ src/main/java/com/cym/config/ViewConfig.java | 22 ++++++++ .../controller/adminPage/LogController.java | 15 +----- src/test/java/com/cym/TestUtils.java | 12 +---- 6 files changed, 58 insertions(+), 90 deletions(-) create mode 100644 src/main/java/com/cym/config/ViewConfig.java diff --git a/pom.xml b/pom.xml index 48075d58..1de27970 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.noear solon-parent - 2.4.5 + 3.0.3 4.0.0 @@ -40,16 +40,21 @@ org.noear - solon.boot.undertow + solon-view-freemarker org.noear - solon.logging.logback + solon-boot-undertow + + + + org.noear + solon-logging-logback org.noear - solon.scheduling.simple + solon-scheduling-simple @@ -137,6 +142,7 @@ + ${project.artifactId} com.github.shalousun @@ -160,41 +166,13 @@ - org.apache.maven.plugins - maven-compiler-plugin + org.noear + solon-maven-plugin - -parameters - 1.8 - 1.8 - UTF-8 + + com.cym.NginxWebUI - - - org.apache.maven.plugins - maven-assembly-plugin - - ${project.name}-${project.version} - false - - jar-with-dependencies - - - - com.cym.NginxWebUI - - - - - - make-assembly - package - - single - - - - diff --git a/src/main/java/com/cym/NginxWebUI.java b/src/main/java/com/cym/NginxWebUI.java index bb18694d..09252258 100644 --- a/src/main/java/com/cym/NginxWebUI.java +++ b/src/main/java/com/cym/NginxWebUI.java @@ -46,22 +46,7 @@ public class NginxWebUI { logger.error(e.getMessage(), e); } - Solon.start(NginxWebUI.class, args, app -> { - app.onError(e -> logger.error(e.getMessage(), e)); - - app.before(c -> { - String path = c.path(); - while (path.contains("//")) { - path = path.replace("//", "/"); - } - c.pathNew(path); - }); - - app.onEvent(freemarker.template.Configuration.class, cfg -> { - cfg.setSetting("classic_compatible", "true"); - cfg.setSetting("number_format", "0.##"); - }); - }); + Solon.start(NginxWebUI.class, args); } public static void killSelf(String[] args) { diff --git a/src/main/java/com/cym/config/AppFilter.java b/src/main/java/com/cym/config/AppFilter.java index 8f65f193..7ddd6102 100644 --- a/src/main/java/com/cym/config/AppFilter.java +++ b/src/main/java/com/cym/config/AppFilter.java @@ -1,17 +1,11 @@ package com.cym.config; -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; import java.io.File; -import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; @@ -19,10 +13,13 @@ import java.util.Set; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; +import org.noear.solon.core.exception.StatusException; import org.noear.solon.core.handle.Context; import org.noear.solon.core.handle.Filter; import org.noear.solon.core.handle.FilterChain; import org.noear.solon.core.handle.UploadedFile; +import org.noear.solon.core.util.KeyValues; +import org.noear.solon.core.util.MultiMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,12 +35,10 @@ import com.cym.utils.MessageUtils; import com.cym.utils.PropertiesUtils; import cn.hutool.core.codec.Base64; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; -import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; @Component @@ -68,7 +63,16 @@ public class AppFilter implements Filter { @Override public void doFilter(Context ctx, FilterChain chain) throws Throwable { + try { + doFilterDo(ctx, chain); + } catch (StatusException e) { + ctx.status(e.getCode()); + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } + } + private void doFilterDo(Context ctx, FilterChain chain) throws Throwable { String path = ctx.path().toLowerCase(); // 全局过滤器 @@ -174,7 +178,7 @@ public class AppFilter implements Filter { } else { // 普通请求 Admin admin = new BaseController().getAdmin(); - String body = buldBody(ctx.paramsMap(), remote, admin); + String body = buldBody(ctx.paramMap(), remote, admin); httpResponse = HttpRequest.post(url).body(body).execute(); } @@ -277,18 +281,16 @@ public class AppFilter implements Filter { } - private String buldBody(Map> parameterMap, Remote remote, Admin admin) throws UnsupportedEncodingException { + private String buldBody(MultiMap parameterMap, Remote remote, Admin admin) throws UnsupportedEncodingException { List body = new ArrayList<>(); body.add("creditKey=" + remote.getCreditKey()); if (admin != null) { body.add("adminName=" + admin.getName()); } - for (Iterator itr = parameterMap.entrySet().iterator(); itr.hasNext();) { - Map.Entry me = (Map.Entry) itr.next(); - - for (String value : (List) me.getValue()) { - body.add(me.getKey() + "=" + URLEncoder.encode(value, "UTF-8")); + for (KeyValues kv : parameterMap) { + for (String value : kv.getValues()) { + body.add(kv.getKey() + "=" + URLEncoder.encode(value, "UTF-8")); } } diff --git a/src/main/java/com/cym/config/ViewConfig.java b/src/main/java/com/cym/config/ViewConfig.java new file mode 100644 index 00000000..7e501fbc --- /dev/null +++ b/src/main/java/com/cym/config/ViewConfig.java @@ -0,0 +1,22 @@ +package com.cym.config; + +import org.noear.solon.annotation.Bean; +import org.noear.solon.annotation.Configuration; +import org.noear.solon.view.freemarker.FreemarkerRender; + +/** + * @author noear 2024/11/12 created + */ +@Configuration +public class ViewConfig { + @Bean + public void init(FreemarkerRender render) throws Exception { + render.getProvider().setSetting("classic_compatible", "true"); + render.getProvider().setSetting("number_format", "0.##"); + + if (render.getProviderOfDebug() != null) { + render.getProviderOfDebug().setSetting("classic_compatible", "true"); + render.getProviderOfDebug().setSetting("number_format", "0.##"); + } + } +} diff --git a/src/main/java/com/cym/controller/adminPage/LogController.java b/src/main/java/com/cym/controller/adminPage/LogController.java index 70bed72e..8b889ce4 100644 --- a/src/main/java/com/cym/controller/adminPage/LogController.java +++ b/src/main/java/com/cym/controller/adminPage/LogController.java @@ -2,13 +2,10 @@ package com.cym.controller.adminPage; import java.io.File; import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; import org.noear.solon.annotation.Controller; import org.noear.solon.annotation.Inject; import org.noear.solon.annotation.Mapping; -import org.noear.solon.core.handle.Context; import org.noear.solon.core.handle.ModelAndView; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,17 +81,9 @@ public class LogController extends BaseController { } @Mapping("down") - public void down(ModelAndView modelAndView, String id) throws IOException { + public File down(String id) throws IOException { Log log = sqlHelper.findById(id, Log.class); - File file = new File(log.getPath()); - - Context.current().contentType("application/octet-stream"); - String headerKey = "Content-Disposition"; - String headerValue = "attachment; filename=" + URLUtil.encode(file.getName()); - Context.current().header(headerKey, headerValue); - - InputStream inputStream = Files.newInputStream(file.toPath()); - Context.current().output(inputStream); + return new File(log.getPath()); } @Mapping("tailCmd") diff --git a/src/test/java/com/cym/TestUtils.java b/src/test/java/com/cym/TestUtils.java index 5e06fff0..52d7a866 100644 --- a/src/test/java/com/cym/TestUtils.java +++ b/src/test/java/com/cym/TestUtils.java @@ -1,18 +1,10 @@ package com.cym; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; +import jdk.nashorn.internal.ir.annotations.Ignore; +import org.junit.jupiter.api.Test; import org.noear.solon.test.HttpTester; -import org.noear.solon.test.SolonJUnit4ClassRunner; import org.noear.solon.test.SolonTest; -@RunWith(SolonJUnit4ClassRunner.class) @SolonTest(NginxWebUI.class) public class TestUtils extends HttpTester { @Test -- Gitee From cd4128336026be90203b8d0d68bc911a2a41550b Mon Sep 17 00:00:00 2001 From: noear Date: Wed, 13 Nov 2024 09:17:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + src/main/java/com/cym/config/AppFilter.java | 7 +++++++ src/main/java/com/cym/config/ViewConfig.java | 4 +--- .../java/com/cym/controller/adminPage/LogController.java | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 1de27970..7d3c4edf 100644 --- a/pom.xml +++ b/pom.xml @@ -165,6 +165,7 @@ + org.noear solon-maven-plugin diff --git a/src/main/java/com/cym/config/AppFilter.java b/src/main/java/com/cym/config/AppFilter.java index 7ddd6102..3f600101 100644 --- a/src/main/java/com/cym/config/AppFilter.java +++ b/src/main/java/com/cym/config/AppFilter.java @@ -63,10 +63,16 @@ public class AppFilter implements Filter { @Override public void doFilter(Context ctx, FilterChain chain) throws Throwable { + //todo: 原异常处理改为正常的上抛了 try { doFilterDo(ctx, chain); } catch (StatusException e) { + //4xx 相关状态异常 ctx.status(e.getCode()); + + if (404 != e.getCode()) { + logger.error(e.getMessage(), e); + } } catch (Throwable e) { logger.error(e.getMessage(), e); } @@ -178,6 +184,7 @@ public class AppFilter implements Filter { } else { // 普通请求 Admin admin = new BaseController().getAdmin(); + //todo: ctx.paramsMap() 已取消,复用 ctx.paramMap() String body = buldBody(ctx.paramMap(), remote, admin); httpResponse = HttpRequest.post(url).body(body).execute(); diff --git a/src/main/java/com/cym/config/ViewConfig.java b/src/main/java/com/cym/config/ViewConfig.java index 7e501fbc..e30a29b2 100644 --- a/src/main/java/com/cym/config/ViewConfig.java +++ b/src/main/java/com/cym/config/ViewConfig.java @@ -4,13 +4,11 @@ import org.noear.solon.annotation.Bean; import org.noear.solon.annotation.Configuration; import org.noear.solon.view.freemarker.FreemarkerRender; -/** - * @author noear 2024/11/12 created - */ @Configuration public class ViewConfig { @Bean public void init(FreemarkerRender render) throws Exception { + //todo: 从 “app.onEvent(freemarker.template.Configuration.class, cfg->{})“ 迁移过来 render.getProvider().setSetting("classic_compatible", "true"); render.getProvider().setSetting("number_format", "0.##"); diff --git a/src/main/java/com/cym/controller/adminPage/LogController.java b/src/main/java/com/cym/controller/adminPage/LogController.java index 8b889ce4..a64d2190 100644 --- a/src/main/java/com/cym/controller/adminPage/LogController.java +++ b/src/main/java/com/cym/controller/adminPage/LogController.java @@ -83,6 +83,7 @@ public class LogController extends BaseController { @Mapping("down") public File down(String id) throws IOException { Log log = sqlHelper.findById(id, Log.class); + //todo: 简化下载处理 return new File(log.getPath()); } -- Gitee From 9624a106acb21696047d1f5bb31e6ee76dd595ec Mon Sep 17 00:00:00 2001 From: noear Date: Wed, 13 Nov 2024 09:40:42 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E6=89=93=E5=8C=85?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 7d3c4edf..e0d3b26d 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,6 @@ - ${project.artifactId} com.github.shalousun @@ -165,15 +164,42 @@ - - org.noear - solon-maven-plugin + org.apache.maven.plugins + maven-compiler-plugin - - com.cym.NginxWebUI + -parameters + 1.8 + 1.8 + UTF-8 + + + org.apache.maven.plugins + maven-assembly-plugin + + ${project.name}-${project.version} + false + + jar-with-dependencies + + + + com.cym.NginxWebUI + + + + + + make-assembly + package + + single + + + + -- Gitee