diff --git a/.gitignore b/.gitignore
index ed8368a..f87a0f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,3 +45,5 @@ nbdist/
!*/build/*.java
!*/build/*.html
!*/build/*.xml
+
+ruoyi-admin/src/main/resources/public/*
\ No newline at end of file
diff --git a/clean.bat b/bin/clean.bat
similarity index 100%
rename from clean.bat
rename to bin/clean.bat
diff --git a/package.bat b/bin/package.bat
similarity index 100%
rename from package.bat
rename to bin/package.bat
diff --git a/run.bat b/bin/run.bat
similarity index 100%
rename from run.bat
rename to bin/run.bat
diff --git a/ry.bat b/bin/ry.bat
similarity index 100%
rename from ry.bat
rename to bin/ry.bat
diff --git a/bin/start.bat b/bin/start.bat
new file mode 100644
index 0000000..8072836
--- /dev/null
+++ b/bin/start.bat
@@ -0,0 +1,13 @@
+@echo off
+echo.
+echo [��Ϣ] ʹ��Jar��������Web���̡�
+echo.
+
+cd %~dp0
+cd ..\libs
+
+set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
+
+java -jar %JAVA_OPTS% ruoyi-admin-1.0.0.jar
+
+pause
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 03dffab..0d448b6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -211,12 +211,6 @@
${net.coobird.version}
-
- org.springframework.boot
- spring-boot-starter-thymeleaf
- 2.5.15
-
-
com.ruoyi
@@ -224,6 +218,13 @@
${ruoyi.version}
+
+
+ org.tuckey
+ urlrewritefilter
+ 4.0.4
+
+
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index b8f33de..2d8339c 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -18,12 +18,6 @@
-
-
- org.springframework.boot
- spring-boot-starter-thymeleaf
-
-
org.springframework.boot
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index ab06039..7387706 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -37,15 +37,6 @@ spring:
restart:
# 热部署开关
enabled: true
- # 模板引擎
- thymeleaf:
- mode: LEGACYHTML5
- encoding: utf-8
- # 禁用缓存
- cache: false
- prefix: classpath:/web/
- suffix: .vue
- content-type: text/html
# 开发环境配置
server:
@@ -118,18 +109,3 @@ xss:
excludes: /system/notice
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
-
-sms:
- # 启用短信平台
- startSms: true
- # 过期时间(分钟)
- expiration: 2
- # 发送频率间隔(分钟)
- frequency: 1
-
-# 短信平台(助通)
-zt:
- send:
- sms:
- username: znrx666hy
- password: RXZTKS0FaLG4pN
diff --git a/ruoyi-admin/src/main/resources/assembly.xml b/ruoyi-admin/src/main/resources/assembly.xml
index 863c2d2..7936dc3 100644
--- a/ruoyi-admin/src/main/resources/assembly.xml
+++ b/ruoyi-admin/src/main/resources/assembly.xml
@@ -32,5 +32,10 @@
bin
755
+
+ ${project.parent.basedir}/bin/start.bat
+ bin
+ 755
+
diff --git a/ruoyi-admin/src/main/resources/urlrewrite.xml b/ruoyi-admin/src/main/resources/urlrewrite.xml
new file mode 100644
index 0000000..a8793e6
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/urlrewrite.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ ^/api/(.*)$
+ /$1
+
+
\ No newline at end of file
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/object/DumpUploadTask.java b/ruoyi-file/src/main/java/com/ruoyi/file/object/DumpUploadTask.java
new file mode 100644
index 0000000..3d832f7
--- /dev/null
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/object/DumpUploadTask.java
@@ -0,0 +1,19 @@
+package com.ruoyi.file.object;
+
+import java.util.TimerTask;
+
+public class DumpUploadTask extends TimerTask
+{
+ private final ProjectState state;
+
+ public DumpUploadTask(ProjectState state)
+ {
+ this.state = state;
+ }
+
+ @Override
+ public void run()
+ {
+ StateMachine.INSTANCE.AddState(state);
+ }
+}
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/object/StateMachine.java b/ruoyi-file/src/main/java/com/ruoyi/file/object/StateMachine.java
index 16f8441..70c3551 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/object/StateMachine.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/object/StateMachine.java
@@ -24,7 +24,7 @@ public final class StateMachine
private final Map projectStateMap = new LinkedHashMap<>();
public static final StateMachine INSTANCE = new StateMachine();
- public void AddState(ProjectState state)
+ public synchronized void AddState(ProjectState state)
{
ProjectState projectState = projectStateMap.get(state.token);
if(null != projectState)
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/request/CommonAttachReq.java b/ruoyi-file/src/main/java/com/ruoyi/file/request/CommonAttachReq.java
index 13d11ca..ef2e337 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/request/CommonAttachReq.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/request/CommonAttachReq.java
@@ -6,16 +6,16 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
-public class CommonAttachReq
+public class CommonAttachReq extends RuralCollectiveAssetsBaseReq
{
+ public static final String REDIRECT_URI = "/file/common/attach";
+
@NotBlank(message = "文件分类不能为空")
private String bizPath;
@NotBlank(message = "文件表名不能为空")
private String tableName;
@NotNull(message = "文件表ID不能为空")
private Long tableId;
- @NotBlank(message = "服务标识不能为空")
- private String token;
private String fileType;
}
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/request/CommonUploadReq.java b/ruoyi-file/src/main/java/com/ruoyi/file/request/CommonUploadReq.java
index ab82989..d485904 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/request/CommonUploadReq.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/request/CommonUploadReq.java
@@ -6,10 +6,9 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
-public class CommonUploadReq
+public class CommonUploadReq extends RuralCollectiveAssetsBaseReq
{
- @NotBlank(message = "服务标识不能为空")
- private String token;
+ public static final String REDIRECT_URI = "/file/common/upload";
private String bizPath = "upload";
}
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/request/FinanceVoucherUploadReq.java b/ruoyi-file/src/main/java/com/ruoyi/file/request/FinanceVoucherUploadReq.java
index 1149f0d..419928f 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/request/FinanceVoucherUploadReq.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/request/FinanceVoucherUploadReq.java
@@ -2,14 +2,12 @@ package com.ruoyi.file.request;
import lombok.Data;
-import javax.validation.constraints.NotBlank;
-
@Data
-public class FinanceVoucherUploadReq
+public class FinanceVoucherUploadReq extends RuralCollectiveAssetsBaseReq
{
+ public static final String REDIRECT_URI = "/file/finance/voucher/upload";
+
private Long id;
- @NotBlank(message = "服务标识不能为空")
- private String token;
private String bizPath = "voucher";
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/request/RuralCollectiveAssetsBaseReq.java b/ruoyi-file/src/main/java/com/ruoyi/file/request/RuralCollectiveAssetsBaseReq.java
new file mode 100644
index 0000000..50c1874
--- /dev/null
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/request/RuralCollectiveAssetsBaseReq.java
@@ -0,0 +1,37 @@
+package com.ruoyi.file.request;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Map;
+
+@Data
+public class RuralCollectiveAssetsBaseReq
+{
+ @NotBlank(message = "服务标识不能为空")
+ private String token;
+
+ private String authorization; // api_token 如果为空, 重定向则不携带身份认证
+
+ public Map toMap(String...rmNames)
+ {
+ Map map = BeanUtil.beanToMap(this, false, true);
+ map.remove("token");
+ map.remove("authorization");
+ if(null != rmNames)
+ {
+ for(String rmName : rmNames)
+ {
+ map.remove(rmName);
+ }
+ }
+ return map;
+ }
+
+ public boolean withAuthorization()
+ {
+ return StringUtils.isNotEmpty(authorization);
+ }
+}
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/request/UploadRedirectReq.java b/ruoyi-file/src/main/java/com/ruoyi/file/request/UploadRedirectReq.java
index 9b9aee5..4afdc29 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/request/UploadRedirectReq.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/request/UploadRedirectReq.java
@@ -1,16 +1,12 @@
package com.ruoyi.file.request;
-import com.ruoyi.common.utils.StringUtils;
import lombok.Data;
-import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotBlank;
import java.util.Enumeration;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.Set;
@Data
public final class UploadRedirectReq
@@ -18,12 +14,22 @@ public final class UploadRedirectReq
@NotBlank(message = "重定向地址不能为空")
private String redirectUri;
- private String token;
+ // 身份授权, 从请求中读取
+ private String authorization;
+ // 重定向携带身份授权的参数名, 置空则不携带
+ private String authorizationName = "api_token";
+ // 重定向参数数据
private Map formData;
public void ParseToken(HttpServletRequest request)
{
- token = request.getHeader("Authorization");
+ authorization = request.getHeader("Authorization");
+ }
+
+ public void SetupToken(String authorizationName, HttpServletRequest request)
+ {
+ this.authorizationName = authorizationName;
+ ParseToken(request);
}
public void ParseFormData(HttpServletRequest request)
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/service/FileService.java b/ruoyi-file/src/main/java/com/ruoyi/file/service/FileService.java
index 4c1516c..86039a3 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/service/FileService.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/service/FileService.java
@@ -12,6 +12,7 @@ import cn.hutool.http.Method;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.PathUtils;
import com.ruoyi.file.domain.Project;
+import com.ruoyi.file.object.DumpUploadTask;
import com.ruoyi.file.request.CommonAttachReq;
import com.ruoyi.file.request.CommonUploadReq;
import com.ruoyi.file.object.ProjectState;
@@ -27,6 +28,7 @@ import com.ruoyi.file.object.UploadSession;
import com.ruoyi.file.object.UploadTask;
import com.ruoyi.file.utils.FileUploadFunc;
import com.ruoyi.file.utils.ProjectUtils;
+import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.web.service.TokenService;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
@@ -37,6 +39,7 @@ import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.TimerTask;
@Service
public class FileService
@@ -97,8 +100,8 @@ public class FileService
public void commonUpload(MultipartFile file, CommonUploadReq req, HttpServletRequest request, HttpServletResponse response)
{
UploadRedirectReq redirectReq = new UploadRedirectReq();
- redirectReq.setRedirectUri("/file/common/upload");
- redirectReq.ParseToken(request);
+ redirectReq.setRedirectUri(CommonUploadReq.REDIRECT_URI);
+ redirectReq.SetupToken(req.getAuthorization(), request);
UploadLog.Clear();
UploadSession session = Upload(file, req.getBizPath(), req.getToken());
@@ -109,11 +112,9 @@ public class FileService
public void commonAttach(MultipartFile file, CommonAttachReq req, HttpServletRequest request, HttpServletResponse response)
{
UploadRedirectReq redirectReq = new UploadRedirectReq();
- redirectReq.setRedirectUri("/file/common/attach");
- Map map = BeanUtil.beanToMap(req, false, true);
- map.remove("token");
- redirectReq.setFormData(map);
- redirectReq.ParseToken(request);
+ redirectReq.setRedirectUri(CommonAttachReq.REDIRECT_URI);
+ redirectReq.setFormData(req.toMap());
+ redirectReq.SetupToken(req.getAuthorization(), request);
UploadLog.Clear();
UploadSession session = Upload(file, req.getBizPath(), req.getToken());
@@ -124,12 +125,9 @@ public class FileService
public void financeVoucherUpload(MultipartFile file, FinanceVoucherUploadReq req, HttpServletRequest request, HttpServletResponse response)
{
UploadRedirectReq redirectReq = new UploadRedirectReq();
- redirectReq.setRedirectUri("/file/finance/voucher/upload");
- Map map = BeanUtil.beanToMap(req, false, true);
- map.remove("token");
- map.remove("bizPath");
- redirectReq.setFormData(map);
- redirectReq.ParseToken(request);
+ redirectReq.setRedirectUri(FinanceVoucherUploadReq.REDIRECT_URI);
+ redirectReq.setFormData(req.toMap("bizPath"));
+ redirectReq.SetupToken(req.getAuthorization(), request);
UploadLog.Clear();
UploadSession session = Upload(file, req.getBizPath(), req.getToken());
@@ -194,7 +192,8 @@ public class FileService
{
String url = PathUtils.appendPaths(session.project.getRemoteHost(), req.getRedirectUri());
Map parms = new LinkedHashMap<>();
- parms.put("api_token", TokenService.getPureToken(req.getToken()));
+ if(StringUtils.isNotEmpty(req.getAuthorizationName()))
+ parms.put(req.getAuthorizationName(), TokenService.getPureToken(req.getAuthorization()));
parms.put("fileUrl", session.result.getFileUrl());
parms.put("fileName", session.task.OriginFileName());
if(StringUtils.isNotEmpty(session.result.getThumbnailFileUrl()))
@@ -244,7 +243,8 @@ public class FileService
state.AddNumError(1);
state.SetLastErrorTime(session.result.getTime());
}
- StateMachine.INSTANCE.AddState(state);
UploadLog.Appendln(state.ToString(", "));
+
+ AsyncManager.me().execute(new DumpUploadTask(state));
}
}
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index c358689..693aad3 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -65,6 +65,12 @@
ruoyi-system
+
+
+ org.tuckey
+ urlrewritefilter
+
+
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index c6312df..e76c461 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -126,7 +126,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
// open 放行
.antMatchers("/open/**").permitAll()
- .antMatchers("/admin/**").permitAll()
+ // 静态资源
+ .antMatchers("/static/**").permitAll()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/UrlRewriteConf.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/UrlRewriteConf.java
new file mode 100644
index 0000000..c310554
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/UrlRewriteConf.java
@@ -0,0 +1,34 @@
+package com.ruoyi.framework.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.core.io.Resource;
+import org.tuckey.web.filters.urlrewrite.Conf;
+import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
+
+import javax.servlet.FilterConfig;
+import java.io.IOException;
+
+@Configuration
+@Order(Integer.MIN_VALUE) // 必须先于security过滤器
+public class UrlRewriteConf extends UrlRewriteFilter
+{
+ private static final String URL_REWRITE = "classpath:/urlrewrite.xml";
+
+ //注入urlrewrite配置文件
+ @Value(URL_REWRITE)
+ private Resource resource;
+
+ //重写配置文件加载方式
+ protected void loadUrlRewriter(FilterConfig filterConfig)
+ {
+ try {
+ //将Resource对象转换成Conf对象
+ Conf conf = new Conf(filterConfig.getServletContext(), resource.getInputStream(), resource.getFilename(), "@@traceability@@");
+ checkConf(conf);
+ } catch (IOException ex) {
+ throw new RuntimeException("Unable to load URL rewrite configuration file from " + URL_REWRITE, ex);
+ }
+ }
+}