Skip to content

Commit b98c941

Browse files
committed
1
1 parent ab4c440 commit b98c941

File tree

21 files changed

+119
-336
lines changed

21 files changed

+119
-336
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ Path : JDK安装目录\bin
111111

112112
```
113113
Linux: mkdir /home/nginxWebUI/
114-
wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar
114+
wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.5/nginxWebUI-4.2.5.jar
115115
116-
Windows: 直接使用浏览器下载 https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar 到 D:/home/nginxWebUI/nginxWebUI.jar
116+
Windows: 直接使用浏览器下载 https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.5/nginxWebUI-4.2.5.jar 到 D:/home/nginxWebUI/nginxWebUI.jar
117117
```
118118

119119
有新版本只需要修改路径中的版本即可

README_EN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ reboot
107107

108108
```
109109
Linux: mkdir /home/nginxWebUI/
110-
wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar
110+
wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.5/nginxWebUI-4.2.5.jar
111111
112-
Windows: Download directly from your browser https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar into D:/home/nginxWebUI/
112+
Windows: Download directly from your browser https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.5/nginxWebUI-4.2.5.jar into D:/home/nginxWebUI/
113113
```
114114

115115
With a new version, you just need to change the version in the path

pom.xml

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@
55
<parent>
66
<groupId>org.noear</groupId>
77
<artifactId>solon-parent</artifactId>
8-
<version>2.4.5</version>
8+
<version>3.0.3</version>
99
</parent>
1010

1111
<modelVersion>4.0.0</modelVersion>
1212
<groupId>com.cym</groupId>
1313
<artifactId>nginxWebUI</artifactId>
14-
<version>4.2.4</version>
14+
<version>4.2.5</version>
1515

1616
<properties>
1717
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1818
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
1919
<java.version>1.8</java.version>
2020
<nginxparser.version>0.9.6</nginxparser.version>
2121
<h2.version>2.1.214</h2.version>
22-
<sqlite-jdbc.version>3.46.0.0</sqlite-jdbc.version>
22+
<sqlite-jdbc.version>3.47.0.0</sqlite-jdbc.version>
2323
<mysql.version>8.0.33</mysql.version>
2424
<googleauth.version>1.5.0</googleauth.version>
2525
<hutool.version>5.8.25</hutool.version>
@@ -40,16 +40,21 @@
4040

4141
<dependency>
4242
<groupId>org.noear</groupId>
43-
<artifactId>solon.boot.undertow</artifactId>
43+
<artifactId>solon-view-freemarker</artifactId>
4444
</dependency>
4545

4646
<dependency>
4747
<groupId>org.noear</groupId>
48-
<artifactId>solon.logging.logback</artifactId>
48+
<artifactId>solon-boot-undertow</artifactId>
4949
</dependency>
50+
5051
<dependency>
5152
<groupId>org.noear</groupId>
52-
<artifactId>solon.scheduling.simple</artifactId>
53+
<artifactId>solon-logging-logback</artifactId>
54+
</dependency>
55+
<dependency>
56+
<groupId>org.noear</groupId>
57+
<artifactId>solon-scheduling-simple</artifactId>
5358
</dependency>
5459

5560
<dependency>
@@ -134,7 +139,6 @@
134139
<artifactId>expiringmap</artifactId>
135140
<version>${expiringmap.version}</version>
136141
</dependency>
137-
138142
</dependencies>
139143

140144
<build>

src/main/java/com/cym/NginxWebUI.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,7 @@ public static void main(String[] args) {
4646
logger.error(e.getMessage(), e);
4747
}
4848

49-
Solon.start(NginxWebUI.class, args, app -> {
50-
app.onError(e -> logger.error(e.getMessage(), e));
51-
52-
app.before(c -> {
53-
String path = c.path();
54-
while (path.contains("//")) {
55-
path = path.replace("//", "/");
56-
}
57-
c.pathNew(path);
58-
});
59-
60-
app.onEvent(freemarker.template.Configuration.class, cfg -> {
61-
cfg.setSetting("classic_compatible", "true");
62-
cfg.setSetting("number_format", "0.##");
63-
});
64-
});
49+
Solon.start(NginxWebUI.class, args);
6550
}
6651

6752
public static void killSelf(String[] args) {

src/main/java/com/cym/config/AppFilter.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
package com.cym.config;
22

3-
import java.io.BufferedInputStream;
4-
import java.io.ByteArrayInputStream;
53
import java.io.File;
6-
import java.io.OutputStream;
74
import java.io.UnsupportedEncodingException;
85
import java.net.URLEncoder;
9-
import java.nio.charset.StandardCharsets;
106
import java.util.ArrayList;
11-
import java.util.Date;
127
import java.util.HashMap;
138
import java.util.HashSet;
14-
import java.util.Iterator;
159
import java.util.List;
1610
import java.util.Map;
1711
import java.util.Properties;
1812
import java.util.Set;
1913

2014
import org.noear.solon.annotation.Component;
2115
import org.noear.solon.annotation.Inject;
16+
import org.noear.solon.core.exception.StatusException;
2217
import org.noear.solon.core.handle.Context;
2318
import org.noear.solon.core.handle.Filter;
2419
import org.noear.solon.core.handle.FilterChain;
2520
import org.noear.solon.core.handle.UploadedFile;
21+
import org.noear.solon.core.util.KeyValues;
22+
import org.noear.solon.core.util.MultiMap;
2623
import org.slf4j.Logger;
2724
import org.slf4j.LoggerFactory;
2825

@@ -38,12 +35,10 @@
3835
import com.cym.utils.PropertiesUtils;
3936

4037
import cn.hutool.core.codec.Base64;
41-
import cn.hutool.core.date.DateUtil;
4238
import cn.hutool.core.io.FileUtil;
4339
import cn.hutool.core.util.StrUtil;
4440
import cn.hutool.http.HttpRequest;
4541
import cn.hutool.http.HttpResponse;
46-
import cn.hutool.http.HttpUtil;
4742
import cn.hutool.json.JSONUtil;
4843

4944
@Component
@@ -68,7 +63,22 @@ public class AppFilter implements Filter {
6863

6964
@Override
7065
public void doFilter(Context ctx, FilterChain chain) throws Throwable {
66+
//todo: 原异常处理改为正常的上抛了
67+
try {
68+
doFilterDo(ctx, chain);
69+
} catch (StatusException e) {
70+
//4xx 相关状态异常
71+
ctx.status(e.getCode());
72+
73+
if (404 != e.getCode()) {
74+
logger.error(e.getMessage(), e);
75+
}
76+
} catch (Throwable e) {
77+
logger.error(e.getMessage(), e);
78+
}
79+
}
7180

81+
private void doFilterDo(Context ctx, FilterChain chain) throws Throwable {
7282
String path = ctx.path().toLowerCase();
7383

7484
// 全局过滤器
@@ -174,7 +184,8 @@ private boolean adminInterceptor(Context ctx) {
174184
} else {
175185
// 普通请求
176186
Admin admin = new BaseController().getAdmin();
177-
String body = buldBody(ctx.paramsMap(), remote, admin);
187+
//todo: ctx.paramsMap() 已取消,复用 ctx.paramMap()
188+
String body = buldBody(ctx.paramMap(), remote, admin);
178189

179190
httpResponse = HttpRequest.post(url).body(body).execute();
180191
}
@@ -277,18 +288,16 @@ private void frontInterceptor(Context ctx) {
277288

278289
}
279290

280-
private String buldBody(Map<String, List<String>> parameterMap, Remote remote, Admin admin) throws UnsupportedEncodingException {
291+
private String buldBody(MultiMap<String> parameterMap, Remote remote, Admin admin) throws UnsupportedEncodingException {
281292
List<String> body = new ArrayList<>();
282293
body.add("creditKey=" + remote.getCreditKey());
283294
if (admin != null) {
284295
body.add("adminName=" + admin.getName());
285296
}
286297

287-
for (Iterator itr = parameterMap.entrySet().iterator(); itr.hasNext();) {
288-
Map.Entry me = (Map.Entry) itr.next();
289-
290-
for (String value : (List<String>) me.getValue()) {
291-
body.add(me.getKey() + "=" + URLEncoder.encode(value, "UTF-8"));
298+
for (KeyValues<String> kv : parameterMap) {
299+
for (String value : kv.getValues()) {
300+
body.add(kv.getKey() + "=" + URLEncoder.encode(value, "UTF-8"));
292301
}
293302

294303
}

src/main/java/com/cym/config/InitConfig.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,18 +163,16 @@ public void start() throws Throwable {
163163
settingService.set("nginxExe", "nginx");
164164
}
165165

166-
// 尝试启动nginx
166+
// 重启nginx, 拿到pid
167167
String nginxExe = settingService.get("nginxExe");
168168
String nginxDir = settingService.get("nginxDir");
169-
170-
logger.info("nginxIsRun:" + NginxUtils.isRun());
171-
if (!NginxUtils.isRun() && StrUtil.isNotEmpty(nginxExe) && StrUtil.isNotEmpty(nginxPath)) {
169+
if (StrUtil.isNotEmpty(nginxExe) && StrUtil.isNotEmpty(nginxPath)) {
170+
RuntimeUtil.execForStr("/bin/sh", "-c", "pkill -9 nginx");
171+
172172
String cmd = nginxExe + " -c " + nginxPath;
173-
174173
if (StrUtil.isNotEmpty(nginxDir)) {
175174
cmd += " -p " + nginxDir;
176175
}
177-
logger.info("runCmd:" + cmd);
178176
RuntimeUtil.execForStr("/bin/sh", "-c", cmd);
179177
}
180178
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.cym.config;
2+
3+
import org.noear.solon.annotation.Bean;
4+
import org.noear.solon.annotation.Configuration;
5+
import org.noear.solon.view.freemarker.FreemarkerRender;
6+
7+
@Configuration
8+
public class ViewConfig {
9+
@Bean
10+
public void init(FreemarkerRender render) throws Exception {
11+
//todo: 从 “app.onEvent(freemarker.template.Configuration.class, cfg->{})“ 迁移过来
12+
render.getProvider().setSetting("classic_compatible", "true");
13+
render.getProvider().setSetting("number_format", "0.##");
14+
15+
if (render.getProviderOfDebug() != null) {
16+
render.getProviderOfDebug().setSetting("classic_compatible", "true");
17+
render.getProviderOfDebug().setSetting("number_format", "0.##");
18+
}
19+
}
20+
}

src/main/java/com/cym/controller/adminPage/LogController.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@
22

33
import java.io.File;
44
import java.io.IOException;
5-
import java.io.InputStream;
6-
import java.nio.file.Files;
75

86
import org.noear.solon.annotation.Controller;
97
import org.noear.solon.annotation.Inject;
108
import org.noear.solon.annotation.Mapping;
11-
import org.noear.solon.core.handle.Context;
129
import org.noear.solon.core.handle.ModelAndView;
1310
import org.slf4j.Logger;
1411
import org.slf4j.LoggerFactory;
@@ -84,17 +81,10 @@ public ModelAndView tail(ModelAndView modelAndView, String id, String protocol)
8481
}
8582

8683
@Mapping("down")
87-
public void down(ModelAndView modelAndView, String id) throws IOException {
84+
public File down(String id) throws IOException {
8885
Log log = sqlHelper.findById(id, Log.class);
89-
File file = new File(log.getPath());
90-
91-
Context.current().contentType("application/octet-stream");
92-
String headerKey = "Content-Disposition";
93-
String headerValue = "attachment; filename=" + URLUtil.encode(file.getName());
94-
Context.current().header(headerKey, headerValue);
95-
96-
InputStream inputStream = Files.newInputStream(file.toPath());
97-
Context.current().output(inputStream);
86+
//todo: 简化下载处理
87+
return new File(log.getPath());
9888
}
9989

10090
@Mapping("tailCmd")

src/main/java/com/cym/service/ServerService.java

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.cym.service;
22

33
import java.io.IOException;
4-
import java.util.ArrayList;
5-
import java.util.Collections;
6-
import java.util.List;
7-
import java.util.UUID;
4+
import java.util.*;
85

6+
import cn.hutool.json.JSONArray;
7+
//import com.alibaba.fastjson.JSONObject;
8+
import cn.hutool.json.JSONObject;
9+
import com.beust.jcommander.internal.Lists;
910
import org.noear.solon.annotation.Component;
1011
import org.noear.solon.annotation.Inject;
1112
import org.slf4j.Logger;
@@ -235,10 +236,13 @@ public void importServer(String nginxPath) throws Exception {
235236
// 设置location
236237
List<Location> locations = new ArrayList<>();
237238
List<NgxEntry> locationBlocks = serverNgx.findAll(NgxBlock.class, "location");
239+
NgxBlock locationBlockTemp;
238240
for (NgxEntry item : locationBlocks) {
239241
Location location = new Location();
240242
// 目前只支持http段的 proxy_pass
241-
NgxParam proxyPassParam = ((NgxBlock) item).findParam("proxy_pass");
243+
locationBlockTemp = (NgxBlock) item;
244+
245+
NgxParam proxyPassParam = locationBlockTemp.findParam("proxy_pass");
242246

243247
location.setPath(((NgxBlock) item).getValue());
244248
// 如果没有proxy_pass type 0,说明可能是静态文件夹映射 type 1
@@ -264,19 +268,58 @@ public void importServer(String nginxPath) throws Exception {
264268

265269
location.setType(1);
266270
}
267-
location.setLocationParamJson(null);
271+
location.setLocationParamJson(getParamJsonFromLocationBlock(locationBlockTemp));
272+
location.setHeader(0);
268273
locations.add(location);
269274
}
270275

271276
server.setDef(0);
272277
server.setSeq(SnowFlakeUtils.getId());
273278
addOver(server, "", locations);
274279
}
280+
275281

276282
// 删除临时文件
277283
FileUtil.del(initNginxPath);
278284
}
279-
285+
286+
private String getParamJsonFromLocationBlock(NgxBlock locationBlock){
287+
288+
List<String> proxyConfigList = Lists.newArrayList("proxy_http_version", "proxy_redirect",
289+
"proxy_set_header", "proxy_cache", "proxy_cache_valid", "proxy_cache_key", "proxy_connect_timeout",
290+
"proxy_read_timeout", "proxy_send_timeout", "proxy_buffer_size", "proxy_buffers",
291+
"proxy_busy_buffers_size", "proxy_cookie_path","proxy_intercept_errors","proxy_request_buffering",
292+
"proxy_buffering",
293+
"proxy_ignore_client_abort","expires","add_header","client_max_body_size"
294+
);
295+
296+
Collection<NgxEntry> entries = locationBlock.getEntries();
297+
List<NgxEntry> paramsTemp;
298+
JSONObject paramJsonTemp = null;
299+
JSONArray paramJsonArray = new JSONArray();
300+
NgxParam ngxParamTemp;
301+
for (String proxyConfig : proxyConfigList) {
302+
paramsTemp = locationBlock.findAll(NgxParam.class,proxyConfig);
303+
if (paramsTemp != null && !paramsTemp.isEmpty()){
304+
305+
for (NgxEntry paramEntry : paramsTemp) {
306+
ngxParamTemp = (NgxParam) paramEntry;
307+
ngxParamTemp.getName();
308+
paramJsonTemp = new JSONObject();
309+
paramJsonTemp.put("name",ngxParamTemp.getName());
310+
paramJsonTemp.put("value",ngxParamTemp.getValue());
311+
paramJsonArray.add(paramJsonTemp);
312+
}
313+
}
314+
315+
}
316+
if (!paramJsonArray.isEmpty()){
317+
return paramJsonArray.toString();
318+
}else {
319+
return null;
320+
}
321+
322+
}
280323
/**
281324
* 重新创建配置文件,删除影响解析的行(比如#号开头,但是此行没有其他内容)
282325
*

src/main/resources/static/lib/layui/css/layui.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)