Compare commits

..

33 Commits

Author SHA1 Message Date
thinkgem
f454f252dc update README.md 2022-05-06 09:07:19 +08:00
thinkgem
3f429e96f6 Merge remote-tracking branch 'origin-github/v4.4_dev' into v4.4_dev 2022-05-05 20:18:41 +08:00
thinkgem
0fb1e9dab9 update 2022-05-05 20:00:15 +08:00
thinkgem
24007dd6b1 root pom 2022-05-05 17:13:53 +08:00
thinkgem
5c4a6257f3 移除空白元素 2022-05-05 13:52:46 +08:00
thinkgem
c5f1feafae spring boot 2.5.13 shiro 1.9.0 等等 2022-05-05 12:06:33 +08:00
thinkgem
2633d6b06d remove commons-fileupload 2022-05-05 11:19:48 +08:00
thinkgem
79a002684e 4.4.1 2022-05-05 11:15:48 +08:00
thinkgem
8ad30622a9 点击右上角【Star】收藏本软件 ^_^ 2022-05-03 23:58:58 +08:00
thinkgem
21bf3bc06c maven plugin update 2022-04-30 11:16:47 +08:00
thinkgem
554e9cea74 系统管理员 to 租户管理员 2022-04-28 22:17:04 +08:00
thinkgem
2e3de8a7dd ie下缓存问题 2022-04-26 15:07:11 +08:00
thinkgem
17b4d2ad90 配置参数和脚本优化 2022-04-24 23:41:36 +08:00
thinkgem
c98de5cea9 update README.md 2022-04-24 11:25:37 +08:00
thinkgem
d4d0dbc408 日志信息优化 2022-04-24 11:08:51 +08:00
thinkgem
b9c3d3d0c6 补充Cloud的Docker代码生成脚本 2022-04-24 11:08:03 +08:00
thinkgem
ed91d35624 日志输出信息优化 2022-04-22 22:05:52 +08:00
thinkgem
76e77fcdb2 update 2022-04-21 18:52:14 +08:00
thinkgem
a4f2a370e3 优化参数配置 2022-04-19 18:27:51 +08:00
thinkgem
b98af679d1 update 2022-04-19 18:21:25 +08:00
thinkgem
1e29444854 update README.md 2022-04-19 11:20:03 +08:00
thinkgem
a892da8369 新增是否启用默认 Servlet 映射(启用后可访问 webapp 下的静态资源访问) 2022-04-18 11:10:42 +08:00
thinkgem
8ed7e4c4e7 remove map file 2022-04-15 17:33:09 +08:00
thinkgem
f5fe75ea69 支持springboot带减号的key写法,自动转换为驼峰格式。 2022-04-14 12:03:31 +08:00
thinkgem
50b5334214 4.4.1 2022-04-13 17:16:13 +08:00
thinkgem
998943ddc3 spring boot 2.5.12 2022-04-01 11:33:39 +08:00
thinkgem
d2f3597a3b update 2022-03-31 11:56:59 +08:00
thinkgem
f4019907b5 update 2022-03-21 10:39:24 +08:00
thinkgem
dd41a04b10 增加一些线程池个性化参数 2022-03-20 14:41:27 +08:00
thinkgem
87e8352418 多线程优化为线程池 2022-03-20 14:11:35 +08:00
thinkgem
41da9ef5cb 4.4.0 2022-03-16 22:30:11 +08:00
thinkgem
09fe0921a6 4.4.0 2022-03-16 21:51:37 +08:00
thinkgem
aaf969187d update readme 2022-03-16 17:55:29 +08:00
66 changed files with 700 additions and 4746 deletions

18
LICENSE
View File

@@ -211,21 +211,13 @@
更不要,全局替换源代码中的 jeesite 或 ThinkGem 等字样,否则你将违反本协议条款承担责任。
4. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
说明出处,举例:本软件基于 JeeSite 快速开发平台并附带链接http://jeesite.com
5. 请知悉该版本用户数不可超过100个最大允许20个用户同时在线不含匿名
6. 无限制版请访问分支:
[V4.0](https://gitee.com/thinkgem/jeesite4/tree/v4.0_dev/)、
[V4.1](https://gitee.com/thinkgem/jeesite4/tree/v4.1_dev/)、
[V5.0](https://gitee.com/thinkgem/jeesite4/tree/v5.0_dev/)
源码下载:
[V4.0](https://gitee.com/thinkgem/jeesite4/repository/archive/v4.0_dev.zip)、
[V4.1](https://gitee.com/thinkgem/jeesite4/repository/archive/v4.1_dev.zip)、
[V5.0](https://gitee.com/thinkgem/jeesite4/repository/archive/v5.0_dev.zip)
7. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
8. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
9. 本项目已申请软件著作权,请尊重开源,感谢阅读。
5. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关
6. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
7. 本项目已申请软件著作权,请尊重开源,感谢阅读。
8. 本版本无用户数限制,无在线人数限制。
版权所有:济南卓源软件有限公司
官方网址http://jeesite.com
技术服务http://s.jeesite.com
联系我们http://s.jeesite.com

View File

@@ -25,7 +25,7 @@
## 平台介绍
JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis前端采用 Beetl、Bootstrap、AdminLTE 经典开发模式,或者分离版 Vue3、Vite、Ant Design Vue、TypeScript、Vben Admin 最先进技术栈。提供在线代码生成功能,包括模块如组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计微内核和插件架构模块增减便捷界面无刷新一键换肤众多账号安全设置密码策略文件在线预览消息推送多元化第三方登录在线定时任务配置支持集群支持SAAS支持多数据源支持读写分离、分库分表支持微服务应用。
JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis前端采用 Beetl、Bootstrap、AdminLTE 经典开发模式,或者分离版 Vue3、Vite、Ant Design Vue、TypeScript、Vben Admin 最先进技术栈。提供在线代码生成功能,可自动创建业务模块工程和微服务模块工程,自动生成前端代码和后端代码;包括功能模块如组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计微内核和插件架构模块增减便捷界面无刷新一键换肤众多账号安全设置密码策略文件在线预览消息推送多元化第三方登录在线定时任务配置支持集群支持SAAS支持多数据源支持读写分离、分库分表支持微服务应用。
JeeSite 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能,中高级人员有时间做一些更有用的事情。让开发者注重专注业务,其余有平台来封装技术细节,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。
@@ -41,7 +41,7 @@ JeeSite 功能全,知识点非常多,也非常少。因为她使用的都是
JeeSite 是一个低代码开发平台具有较高的封装度、扩展性封装不是限制你去做一些事情而是在便捷的同时也具有较好的扩展性在不具备一些功能的情况下JeeSite 提供了扩展接口,提供了原生调用方法。
大家都在用 Spring也在学习 Spring 的优点Spring 提供了较好的扩展性可又有多少人去修改它的源代码呢退一步说大家去修改了 Spring 的源码反而会对未来升级造成很大困扰您说不是呢这样的例子很多所以不要纠结我们非常注重着一块JeeSite 也一样具备强大的扩展性。
大家都在用 Spring也在学习 Spring 的优点Spring 提供了较好的扩展性可又有多少人去修改它的源代码呢退一步说大家去修改了 Spring 的源码反而会对未来升级造成很大困扰您说不是呢这样的例子很多所以不要纠结我们非常注重这一点JeeSite 也一样具备强大的扩展性。
* 至今 JeeSite 平台架构已经非常稳定。
* JeeSite 精益求精,用心打磨每一个细节。
@@ -51,14 +51,14 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
## 技术选型
* 主框架Spring Boot 2.5、Spring Framework 5.3、Apache Shiro 1.8、J2Cache
* 主框架Spring Boot 2.5、Spring Framework 5.3、Apache Shiro 1.9、J2Cache
* 持久层Apache MyBatis 3.5、Hibernate Validator 6.2、Alibaba Druid 1.2
* 视图层Spring MVC 5.3、Beetl 3.3替换JSP、Bootstrap 3.3、AdminLTE 2.4
* 前端组件jQuery 3.5、jqGrid 4.7、layer 3.5、zTree 3.5、jQuery Validation
* 支持 IE9 及以上版本及其他所有现代浏览器,如:谷歌浏览器、火狐浏览器、国产浏览器 等
* 工作流引擎Flowable 6.6、符合 BPMN 规范、在线流程设计器、中国式流程、退回、撤回、自由流
* 技术选型(详细):<http://jeesite.com/docs/technology/>
* JeeSite Vue<http://jeesite.com/docs/jeesite-vue/>
* JeeSite Vue<https://gitee.com/thinkgem/jeesite-vue>
## 更多介绍
@@ -75,26 +75,37 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
* Flowable业务流程模块BPM<http://jeesite.com/docs/bpm/>
* 内容管理模块CMS<https://gitee.com/thinkgem/jeesite4-cms>
* 手机端移动端:<https://gitee.com/thinkgem/jeesite4-uniapp>
* Vue3分离版本<http://jeesite.com/docs/jeesite-vue/>
* Vue3分离版本<https://gitee.com/thinkgem/jeesite-vue>
## 快速体验
### 在线演示
1. 地址:<http://demo.jeesite.com/>
2. 账号system
3. 密码admin
### 本地运行
1. 环境准备:`JDK 1.8 or 11、17``Maven 3.6+``MySQL 5.7 or 8.0`[支持更多数据库](https://jeesite.com/docs/technology/#_8、已支持数据库)
2. 执行命令:`git clone https://gitee.com/thinkgem/jeesite4.git` 下载源码master分支
1. 环境准备:`JDK 1.8 or 11、17``Maven 3.6+`使用 `MySQL 5.7 or 8.0` 数据库、[其它数据库](https://jeesite.com/docs/technology/#_8、已支持数据库)
2. 下载源码:<https://gitee.com/thinkgem/jeesite4/repository/archive/v4.4_dev.zip> 并解压
3. 打开文件:`/web/src/main/resources/config/application.yml` 配置JDBC连接
4. 执行脚本:`/web/bin/init-data.bat` 初始化数据库
5. 执行脚本:`/web/bin/run-tomcat.bat` 启动服务即可
6. 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
7. 部署常见问题:<https://jeesite.com/docs/faq/>
### 容器运行
- 拉取 Docker 镜像:
```
docker pull thinkgem/jeesite-web
```
- 启动脚本:
```
docker run -d -p 8980:8980 --name jeesite-web -v /data:/data \
thinkgem/jeesite-web && docker logs -f jeesite-web
```
- 浏览器访问:<http://127.0.0.1:8980/js/> 账号 system 密码 admin
### 开发环境
1. 部署运行文档:<https://jeesite.com/docs/install-deploy/>
@@ -121,7 +132,7 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
* 文件在线预览:<https://jeesite.com/docs/filepreview/>
* 报表设计器:<https://jeesite.com/docs/ureport/>
* 大屏设计器:<https://jeesite.com/docs/visual/>
* 三员管理员:<https://jeesite.com/docs/3manager/>
* 三员管理员:<https://jeesite.com/docs/manager3/>
* 在线作业调度:<https://jeesite.com/docs/job/>
* 消息推送:<https://jeesite.com/docs/msg-push-use/>
* 手机端框架:<https://jeesite.com/docs/uniapp/>
@@ -144,11 +155,10 @@ JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,
更不要,全局替换源代码中的 jeesite 或 ThinkGem 等字样,否则你将违反本协议条款承担责任。
4. 您若套用本软件的一些代码或功能参考,请保留源文件中的版权和作者,需要在您的软件介绍明显位置
说明出处,举例:本软件基于 JeeSite 快速开发平台并附带链接http://jeesite.com
5. 请知悉该版本用户数不可超过100个最大允许20个用户同时在线不含匿名
6. 无限制版请访问分支:[V4.0](https://gitee.com/thinkgem/jeesite4/tree/v4.0_dev/)、[V4.1](https://gitee.com/thinkgem/jeesite4/tree/v4.1_dev/)、[V5.0](https://gitee.com/thinkgem/jeesite4/tree/v5.0_dev/),源码下载:[V4.0](https://gitee.com/thinkgem/jeesite4/repository/archive/v4.0_dev.zip)、[V4.1](https://gitee.com/thinkgem/jeesite4/repository/archive/v4.1_dev.zip)、[V5.0](https://gitee.com/thinkgem/jeesite4/repository/archive/v5.0_dev.zip)
7. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关
8. 如果你对本软件有改进,希望可以贡献给我们,共同进步
9. 本项目已申请软件著作权,请尊重开源,感谢阅读。
5. 任何基于本软件而产生的一切法律纠纷和责任,均于我司无关
6. 如果你对本软件有改进,希望可以贡献给我们,共同进步。
7. 本项目已申请软件著作权,请尊重开源,感谢阅读
8. 本版本无用户数限制,无在线人数限制
## 技术服务与支持

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.4.0-SNAPSHOT</version>
<version>4.4.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
@@ -17,17 +17,25 @@
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<!-- Servlet Api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Apache Commons -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
@@ -37,28 +45,11 @@
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons-beanutils.version}</version>
<version>${commons-beanutils.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
</dependency>
<!-- Apache Zip Tools
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>${ant.version}</version>
</dependency> -->
<!-- Java serialization -->
<dependency>
@@ -88,23 +79,6 @@
<version>${fastjson.version}</version>
</dependency>
<!-- Java xml
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>${dom4j.version}</version>
</dependency> -->
<!-- jdk11 JAXB module
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency> -->
<!-- XPath xml -->
<dependency>
<groupId>jaxen</groupId>
@@ -123,13 +97,6 @@
<artifactId>httpclient</artifactId>
</dependency>
<!-- Jsoup HTTP
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency> -->
<!-- Email -->
<dependency>
<groupId>org.apache.commons</groupId>
@@ -294,19 +261,9 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
</plugins>
</build>
<developers>
<developer>
<id>thinkgem</id>

View File

@@ -126,7 +126,7 @@ public class PropertiesUtils {
YamlPropertiesFactoryBean bean = new YamlPropertiesFactoryBean();
bean.setResources(resource);
for (Map.Entry<Object,Object> entry : bean.getObject().entrySet()){
properties.put(ObjectUtils.toString(entry.getKey()),
properties.put(getStandardKey(ObjectUtils.toString(entry.getKey())),
ObjectUtils.toString(entry.getValue()));
}
configSet.add(location);
@@ -181,7 +181,7 @@ public class PropertiesUtils {
return value;
}
}
String value = properties.getProperty(key);
String value = properties.getProperty(getStandardKey(key));
if (value != null){
Matcher m = p1.matcher(value);
while(m.find()) {
@@ -231,6 +231,27 @@ public class PropertiesUtils {
return ObjectUtils.toLong(getProperty(key, defValue));
}
/**
* 获取标准key去减号并将后一个字母转换为大写
* @author Think Gem
*/
private String getStandardKey(String key) {
StringBuilder sb = new StringBuilder();
boolean upperCase = false;
for (int i = 0; i < key.length(); i++) {
char c = key.charAt(i);
if (c == '-') {
upperCase = true;
} else if (upperCase) {
sb.append(Character.toUpperCase(c));
upperCase = false;
} else {
sb.append(c);
}
}
return sb.toString();
}
/**
* 设置环境属性
* @param environment

View File

@@ -171,7 +171,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
return ObjectUtils.serializeFst(object);
}
} catch (Exception e) {
logger.error("serialize", e.getMessage());
logger.error("serialize: {}", e.getMessage(), e);
}
return null;
}
@@ -189,7 +189,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
return ObjectUtils.unserializeFst(bytes);
}
} catch (Exception e) {
logger.error("unserialize", e.getMessage());
logger.error("unserialize: {}", e.getMessage());
}
return null;
}

View File

@@ -10,15 +10,9 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.jeesite.common.codec.EncodeUtils;
import com.jeesite.common.image.ImageUtils;
import com.jeesite.common.io.FileUtils;
import com.jeesite.common.media.VideoUtils;
@@ -32,55 +26,33 @@ import com.jeesite.common.ueditor.define.State;
public class BinaryUploader {
public static final State save(HttpServletRequest request,
Map<String, Object> conf) {
FileItemStream fileStream = null; // 原始上传
MultipartFile fileStream2 = null; // Spring MVC 上传
boolean isAjaxUpload = request.getHeader("X-Requested-With") != null;
if (!ServletFileUpload.isMultipartContent(request)) {
Map<String, Object> conf) {
String contentType = request.getContentType();
if (!("POST".equals(request.getMethod()) && contentType != null
&& contentType.startsWith("multipart/"))) {
return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT);
}
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
if ( isAjaxUpload ) {
upload.setHeaderEncoding( EncodeUtils.UTF_8 );
}
try {
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
fileStream = iterator.next();
if (!fileStream.isFormField()) {
MultipartFile file = null;
if (request instanceof MultipartHttpServletRequest){
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Iterator<String> it = multiRequest.getFileNames();
while (it.hasNext()) {
MultipartFile f = multiRequest.getFile(it.next());
if (f != null && !f.isEmpty() && f.getOriginalFilename() != null) {
file = f;
}
break;
}
fileStream = null;
}
if (fileStream == null) {
// 原始上传无文件则检查是否是Spring MVC上传 ThinkGem
MultipartFile file = null;
if (request instanceof MultipartHttpServletRequest){
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Iterator<String> it = multiRequest.getFileNames();
while (it.hasNext()) {
file = multiRequest.getFile(it.next());
break;
}
}
if (file != null && !file.isEmpty() && file.getOriginalFilename() != null) {
fileStream2 = file;
}
}
if (fileStream == null && fileStream2 == null) {
if (file == null) {
return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);
}
String savePath = (String) conf.get("savePath");
String originFileName = fileStream != null ? fileStream.getName() : fileStream2.getOriginalFilename();
String originFileName = file.getOriginalFilename();
String suffix = FileType.getSuffixByFilename(originFileName);
originFileName = originFileName.substring(0,
@@ -97,29 +69,36 @@ public class BinaryUploader {
String physicalPath = FileUtils.path((String) conf.get("rootPath") + savePath);
InputStream is = fileStream != null ? fileStream.openStream() : fileStream2.getInputStream();
State storageState = StorageManager.saveFileByInputStream(is, physicalPath, maxSize);
is.close();
InputStream is = null;
State storageState = null;
try {
is = file.getInputStream();
storageState = StorageManager.saveFileByInputStream(is, physicalPath, maxSize);
} finally {
if (is != null) {
is.close();
}
}
if (storageState.isSuccess()) {
if (storageState != null && storageState.isSuccess()) {
int actionCode = ((Integer) conf.get("actionCode")).intValue();
String ctx = request.getContextPath(); // ThinkGem 修正上传图片后返回无contextpath问题
// 上传图片后,进行图片压缩
if (actionCode == ActionMap.UPLOAD_IMAGE){
// 如果开启了压缩图片
if ((Boolean)conf.get("imageCompressEnable")){
Integer maxWidth = (Integer)conf.get("imageCompressBorder");
ImageUtils.thumbnails(new File(physicalPath), maxWidth, -1, null);
}
}
// 上传成功后 转换格式 按照新的视频格式 返回前台 ThinkGem
else if(actionCode == ActionMap.UPLOAD_VIDEO){
final VideoUtils v = new VideoUtils(physicalPath);
// 先截图
// 先截图
if (v.cutPic()){
// 开启进程,在转换视频文件
Thread thread = new Thread("video-convert") {
@@ -134,28 +113,26 @@ public class BinaryUploader {
}
};
thread.setDaemon(true);
thread.start();
thread.start();
storageState.putInfo("url", ctx + PathFormat.format(savePath) + "." + v.getOutputFileExtension());
storageState.putInfo("type", "." + v.getOutputFileExtension());
storageState.putInfo("original", originFileName +"."+ v.getInputFileExtension());
// Ueditor编辑器上传文件完成后调用事件
StorageManager.uploadFileSuccess(physicalPath, storageState);
return storageState;
}
}
storageState.putInfo("url", ctx + PathFormat.format(savePath));
storageState.putInfo("type", suffix);
storageState.putInfo("original", originFileName + suffix);
// UEditor上传文件成功后调用事件
StorageManager.uploadFileSuccess(physicalPath, storageState);
}
return storageState;
} catch (FileUploadException e) {
return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
} catch (IOException e) {
return new BaseState(false, AppInfo.IO_ERROR);
}
@@ -166,5 +143,5 @@ public class BinaryUploader {
return list.contains(type);
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -164,7 +164,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.sidebar-menu {padding:0 8px 0 7px;}
.sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active > a {color:#1890ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
.sidebar-menu .treeview-item.active>a {color:#1890ff;background-color:#e7f4ff;border-right:0;border-radius:6px;}
/* 页签添加内边距 */
.content-wrapper, .tabpanel_content, .tabpanel_content .html_content, body {background-color:#f0f2f5;}
@@ -209,9 +209,9 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.open>.dropdown-toggle.btn-primary:hover, .layui-layer-btn .layui-layer-btn0,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.select2-container--default .select2-results__option--highlighted[aria-selected],
.wup_container .placeholder .webuploader-pick {background-color:#1890ff!important;border-color:#1890ff;}
.wup_container .placeholder .webuploader-pick {background-color:#1890ff!important;border-color:#1890ff!important;}
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1890ff;}
.form-unit {border-bottom: 1px solid #eee;}
.form-unit {border-bottom:1px solid #eee;}
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1890ff;}
@@ -220,10 +220,10 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#40a9ff!important;box-shadow:0 0 0 2px rgba(24,144,255,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#f6f6f6;}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#fafafa;}
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid tr.ui-row-ltr td, .ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child,
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid .ui-widget-content, .ui-jqgrid tr.ui-row-ltr td,
.ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child {border-color:#eaeaea;}
.ui-jqgrid.ui-widget-content, .ui-jqgrid .ui-widget-content {border-color:#f0f0f0;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#f5f5f5;}
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#ecf9ff;}

View File

@@ -164,7 +164,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.sidebar-menu {padding:0 8px 0 7px;}
.sidebar-menu li>a>.pull-right-container {left:0;}
.sidebar-menu .treeview-item.active > a {color:#2a50ec;background-color:#edf2fc;border-right:0;border-radius:6px;}
.sidebar-menu .treeview-item.active>a {color:#2a50ec;background-color:#edf2fc;border-right:0;border-radius:6px;}
/* 页签添加内边距 */
.content-wrapper, .tabpanel_content, .tabpanel_content .html_content, body {background-color:#f0f2f5;}
@@ -211,7 +211,7 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.select2-container--default .select2-results__option--highlighted[aria-selected],
.wup_container .placeholder .webuploader-pick {background-color:#1e5edb!important;border-color:#1e5edb!important;}
.form-unit, th[aria-selected=true] .ui-jqgrid-sortable {color:#1e5edb;}
.form-unit {border-bottom: 1px solid #eee;}
.form-unit {border-bottom:1px solid #eee;}
.box-main>.box-header {border-bottom-color:#eeeeee;}
.box-main>.box-header .box-title .fa {color:#1e5edb;}
@@ -220,10 +220,10 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
.select2-container--default .select2-search--dropdown .select2-search__field,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {border-color:#557bfa!important;box-shadow:0 0 0 2px rgba(24,80,236,.2);}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#f6f6f6;}
.table thead tr, .ui-jqgrid-htable thead tr, .ui-jqgrid-hdiv, .ui-jqgrid-hbox {background-color:#fafafa;}
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid tr.ui-row-ltr td, .ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child,
.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column,
.ui-jqgrid .ui-jqgrid-labels th, .ui-jqgrid .ui-widget-content, .ui-jqgrid tr.ui-row-ltr td,
.ui-jqgrid tr.ui-row-rtl td, .ui-jqgrid tr.ui-row-ltr td:last-child {border-color:#eaeaea;}
.ui-jqgrid.ui-widget-content, .ui-jqgrid .ui-widget-content {border-color:#f0f0f0;}
.ui-state-hover td, .ui-widget-content .ui-state-hover td, .ui-widget-header .ui-state-hover td,
.ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {background:#f5f5f5;}
.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td {background-color:#f0f5ff;}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -98,7 +98,7 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-loading .layui-layer-loading1{width:37px; height:37px; background:url(loading-1.gif) no-repeat;}
.layui-layer-loading .layui-layer-loading2, .layui-layer-ico16{width:32px; height:32px; background:url(loading-2.gif) no-repeat;}
.layui-layer-tips{background: none; box-shadow:none; border:none;}
.layui-layer-tips .layui-layer-content{position: relative; line-height: 22px; min-width: 12px; padding: 8px 15px; font-size: 12px; _float:left; border-radius: 3px; box-shadow: 1px 1px 3px rgba(0,0,0,.2); background-color: #000; color: #fff;}
.layui-layer-tips .layui-layer-content{position: relative; overflow:visible; line-height: 22px; min-width: 12px; padding: 8px 15px; font-size: 12px; _float:left; border-radius: 3px; box-shadow: 1px 1px 3px rgba(0,0,0,.2); background-color: #000; color: #fff;}
.layui-layer-tips .layui-layer-close{right:-2px; top:-1px;}
.layui-layer-tips i.layui-layer-TipsG{ position:absolute; width:0; height:0; border-width:8px; border-color:transparent; border-style:dashed; *overflow:hidden;}
.layui-layer-tips i.layui-layer-TipsT, .layui-layer-tips i.layui-layer-TipsB{left:5px; border-right-style:solid; border-right-color: #000;}

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.4.0-SNAPSHOT</version>
<version>4.4.1-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
</parent>
@@ -16,10 +16,6 @@
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<dependency>
@@ -30,12 +26,6 @@
</dependencies>
<build>
<plugins>
</plugins>
</build>
<developers>
<developer>
<id>thinkgem</id>

View File

@@ -8,6 +8,10 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -28,6 +32,8 @@ import com.jeesite.modules.cms.utils.CmsUtils;
import com.jeesite.modules.file.utils.FileUploadUtils;
import com.jeesite.modules.sys.utils.UserUtils;
import io.netty.util.concurrent.DefaultThreadFactory;
/**
* 文章表Service
* @author 长春叭哥、ThinkGem
@@ -39,6 +45,10 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
@Autowired
private ArticleDataDao articleDataDao;
private static ExecutorService updateExpiredWeightThreadPool = new ThreadPoolExecutor(5, 20,
60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),
new DefaultThreadFactory("cms-update-expired-weight"));
/**
* 获取单条数据
@@ -77,14 +87,12 @@ public class ArticleService extends CrudService<ArticleDao, Article> {
*/
@Override
public Page<Article> findPage(Article article) {
Thread thread = new Thread("cms-update-expired-weight") {
updateExpiredWeightThreadPool.submit(new Runnable() {
@Override
public void run() {
updateExpiredWeight(article);
}
};
thread.setDaemon(true);
thread.start();
});
return super.findPage(article);
}

View File

@@ -11,4 +11,5 @@
4.3.1
4.3.2
4.3.3
4.4.0
4.4.0
4.4.1

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.4.0-SNAPSHOT</version>
<version>4.4.1-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
</parent>
@@ -17,10 +17,6 @@
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<!-- MySQL -->
@@ -95,12 +91,6 @@
</dependencies>
<build>
<plugins>
</plugins>
</build>
<developers>
<developer>
<id>thinkgem</id>

View File

@@ -62,7 +62,7 @@ public class ShiroConfig {
@ConditionalOnMissingBean(name="shiroFilterProxy")
public FilterRegistrationBean<Filter> shiroFilterProxy(ShiroFilterFactoryBean shiroFilter) throws Exception {
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter((Filter) shiroFilter.getInstance());
bean.setFilter(shiroFilter.getObject());
bean.addUrlPatterns("/*");
bean.setOrder(Ordered.HIGHEST_PRECEDENCE + 5000);
return bean;

View File

@@ -0,0 +1,26 @@
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
*/
package com.jeesite.modules.config.web;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 是否启用默认 Servlet 映射(启用后可访问 webapp 下的静态资源访问)
* @author ThinkGem
* @version 2022年4月18日
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name="server.servlet.register-default-servlet", havingValue="true", matchIfMissing=false)
public class DefaultServletConfig implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}

View File

@@ -6,6 +6,10 @@ package com.jeesite.modules.msg.service;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -34,6 +38,8 @@ import com.jeesite.modules.sys.entity.EmpUser;
import com.jeesite.modules.sys.entity.User;
import com.jeesite.modules.sys.service.EmpUserService;
import io.netty.util.concurrent.DefaultThreadFactory;
/**
* 内部消息Service
* @author ThinkGem
@@ -47,6 +53,10 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
private EmpUserService empUserService;
@Autowired
private MsgInnerRecordDao msgInnerRecordDao;
private static ExecutorService msgPushThreadPool = new ThreadPoolExecutor(5, 20,
60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),
new DefaultThreadFactory("cms-update-expired-weight"));
/**
* 获取单条数据
@@ -191,7 +201,7 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
});
// 手动触发消息推送任务
if (Global.TRUE.equals(Global.getProperty("msg.realtime.enabled"))){
Thread thread = new Thread("msg-push-task-execute"){
msgPushThreadPool.submit(new Runnable() {
public void run() {
try{
MsgPushUtils.getMsgPushTask().execute();
@@ -199,9 +209,7 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
logger.error("实时消息发送失败,推送服务配置不正确。", ex);
}
}
};
thread.setDaemon(true);
thread.start();
});
}
}

View File

@@ -34,33 +34,32 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
private static final String TRACE_ID = "TRACE_ID";
private static final ThreadLocal<Long> startTimeThreadLocal =
new NamedThreadLocal<Long>("LogInterceptor StartTime");
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
if (StringUtils.isBlank(MDC.get(TRACE_ID))) {
MDC.put(TRACE_ID, IdGen.nextId());
}
long beginTime = System.currentTimeMillis();// 1、开始时间
startTimeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
MDC.put(TRACE_ID, IdGen.nextId());
}
long beginTime = System.currentTimeMillis();// 1、开始时间
startTimeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
if (logger.isDebugEnabled()){
logger.debug("开始计时: {} URI: {} IP: {}", new SimpleDateFormat("hh:mm:ss.SSS")
.format(beginTime), request.getRequestURI(), IpUtils.getRemoteAddr(request));
logger.debug("请求开始 URI: {}, IP: {}", request.getRequestURI(), IpUtils.getRemoteAddr(request));
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
if (modelAndView != null){
logger.info("ViewName: " + modelAndView.getViewName() + " <<<<<<<<< " + request.getRequestURI() + " >>>>>>>>> " + handler);
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
if (modelAndView != null && logger.isDebugEnabled()){
logger.debug("ViewName: " + modelAndView.getViewName() + " <<< " + request.getRequestURI() + " >>> " + handler);
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
long endTime = System.currentTimeMillis(); // 2、结束时间
long startTime = 0; // 得到线程绑定的局部变量(开始时间)
if (startTimeThreadLocal != null){
@@ -74,16 +73,17 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
startTime = endTime + 1000; // 得到 -1000 方便统计
}
long executeTime = endTime - startTime; // 3、获取执行时间
// 保存日志
LogUtils.saveLog(UserUtils.getUser(), request, handler, ex, null, null, executeTime);
// 打印JVM信息。
if (logger.isDebugEnabled()){
if (logger.isInfoEnabled()){
Runtime runtime = Runtime.getRuntime();
logger.debug("计时结束: {} 用时: {} URI: {} 总内存: {} 已用内存: {}",
DateUtils.formatDate(endTime, "hh:mm:ss.SSS"), TimeUtils.formatDateAgo(executeTime), request.getRequestURI(),
ByteUtils.formatByteSize(runtime.totalMemory()), ByteUtils.formatByteSize(runtime.totalMemory()-runtime.freeMemory()));
long totalMemory = runtime.totalMemory();
logger.info("请求完成 URI: {}, 用时: {}, 总内存: {}, 剩余: {}", request.getRequestURI(),
TimeUtils.formatDateAgo(executeTime), ByteUtils.formatByteSize(totalMemory),
ByteUtils.formatByteSize(totalMemory-(totalMemory-runtime.freeMemory())));
}
MDC.remove(TRACE_ID);
}

View File

@@ -48,7 +48,6 @@ import io.netty.util.concurrent.DefaultThreadFactory;
*/
public class LogUtils {
// 采用线程池优化性能
private static ExecutorService logThreadPool = new ThreadPoolExecutor(5, 20,
60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),
new DefaultThreadFactory("log-save"));

View File

@@ -59,7 +59,7 @@ public class OnlineController extends BaseController{
@ResponseBody
public Integer count(HttpServletRequest request, HttpServletResponse response) {
// 在线人数统计缓存3分钟的数据要求高的业务可缩小间隔时间
return sessionDAO.getActiveSessionsCount(false, false, 3);
return sessionDAO.getActiveSessionsCount(true, true, 3);
}
/**

View File

@@ -20,7 +20,7 @@ jdbc:
# 初始化连接数
init: 1
# 最小活动连接数
# 最小空闲连接数
minIdle: 3
# 最大激活连接数
maxActive: 20
@@ -85,7 +85,13 @@ spring:
# 缓存及会话共享(专业版)
isClusterMode: false
# 清理全部缓存按钮所清理的缓存列表
clearNames: sysCache,corpCache,userCache,cmsCache,msgPcPoolCache,roleCache,fileUploadCache,bpmFormCache
clearNames: sysCache,corpCache,userCache,roleCache,fileUploadCache,msgPcPoolCache,cmsCache,bpmFormCache
# 用户缓存
#userCache:
# clearTaskPool:
# corePoolSize: 5
# maxPoolSize: 20
# keepAliveSeconds: 60
# 打印横幅
main:
@@ -316,7 +322,7 @@ state:
# Shiro 相关
shiro:
#索引页路径
#页路径
defaultPath: ${shiro.loginUrl}
# 登录相关设置
@@ -399,6 +405,11 @@ shiro:
innerFilter.allowIp: 127.0.0.1
# URI 权限过滤器定义(自定义添加参数时,请不要移除 ${adminPath}/** = user否则会导致权限异常
# 提示:填写过滤规则,请注意先后顺序,从上到下,先匹配先受用规则,匹配成功后不再继续匹配。
filterChainDefinitions: |
${adminPath}/** = user
# # URI 权限过滤器定义以下参考必须登录user可访问的地址和不需要登录anon可访问地址
# filterChainDefinitions: |
# /ReportServer/** = user
# ${adminPath}/file/** = anon
@@ -413,10 +424,6 @@ shiro:
# ${adminPath}/${spring.application.name}/swagger/** = anon
# ${adminPath}/** = user
# URI 权限过滤器定义(自定义添加参数时,请不要移除 ${adminPath}/** = user否则会导致权限异常
filterChainDefinitions: |
${adminPath}/** = user
# 默认的授权过滤定义如果在filterChainDefinitions中已经定义则该定义会被覆盖。
defaultFilterChainDefinitions: |
/tags/* = anon
@@ -457,7 +464,7 @@ session:
# 手机APP设备会话超时参数设置登录请求参数加 param_deviceType=mobileApp 时有效,一般无需单独设置
#mobileAppSessionTimeout: 1800000
# 定时清理失效会话,清理用户直接关闭浏览器造成的孤立会话
# 定时清理失效会话,清理用户直接关闭浏览器造成的孤立会话(设置为 0 关闭,微服务下只开启 core 即可)
sessionTimeoutClean: 1200000
# 会话唯一标识SessionId在Cookie中的名称。
@@ -501,6 +508,13 @@ j2cache:
channel: j2cache
# 缓存命名空间名
namespace: jeesite
# 消息监听器
#listener:
# taskPool:
# corePoolSize: 8
# maxPoolSize: 20
# keepAliveSeconds: 60
# queueCapacity: 1000
# 通知订阅
broadcast:
@@ -699,6 +713,11 @@ msg:
enabled: true
# 消息实时推送任务Bean名称
beanName: msgLocalPushTask
# 消息推送线程池
#pushTaskPool:
# corePoolSize: 5
# maxPoolSize: 20
# keepAliveSeconds: 60
# 推送失败次数,如果推送次数超过了设定次数,仍不成功,则放弃并保存到历史
pushFailNumber: 3

File diff suppressed because one or more lines are too long

View File

@@ -158,6 +158,7 @@
<template>module_cloud/client/bin/package.sh.xml</template>
<template>module_cloud/client/src/main/java/package.xml</template>
<template>module_cloud/client/pom.xml</template>
<template>module_cloud/web/bin/docker/Dockerfile.xml</template>
<template>module_cloud/web/bin/docker-bulid.bat.xml</template>
<template>module_cloud/web/bin/docker-bulid.sh.xml</template>
<template>module_cloud/web/bin/package.bat.xml</template>

View File

@@ -25,10 +25,6 @@
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<dependency>
@@ -39,17 +35,6 @@
</dependencies>
<build>
<plugins>
</plugins>
<pluginManagement>
<plugins>
</plugins>
</pluginManagement>
</build>
<developers>
<developer>
<id>thinkgem</id>

View File

@@ -25,10 +25,6 @@
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<!-- 云客户端 -->
@@ -40,12 +36,6 @@
</dependencies>
<build>
<plugins>
</plugins>
</build>
<developers>
<developer>
<id>thinkgem</id>

View File

@@ -14,14 +14,14 @@ rem *
rem * Author: ThinkGem@163.com
rem */
echo.
echo [信息] 打包Web工程导入到Docker服务。
echo [信息] 打包Web工程编译Docker镜像
echo.
%~d0
cd %~dp0
cd ..
call mvn clean package docker:stop docker:remove docker:build docker:run -Dmaven.test.skip=true -U
call mvn clean package docker:remove docker:build -Dmaven.test.skip=true -U
cd bin
pause]]>

View File

@@ -14,11 +14,11 @@
# *
# */
echo ""
echo "[信息] 使用 Spring Boot Docker 编译 Web 工程。"
echo "[信息] 打包Web工程编译Docker镜像。"
echo ""
cd ..
mvn clean package docker:stop docker:remove docker:build docker:run -Dmaven.test.skip=true -U
mvn clean package docker:remove docker:build -Dmaven.test.skip=true -U
cd bin]]>
</content>

View File

@@ -5,30 +5,26 @@
<name>Dockerfile</name>
<filePath>${module.moduleCode}/${module.moduleCode}/bin/docker</filePath>
<fileName>Dockerfile</fileName>
<content><![CDATA[FROM frolvlad/alpine-java:jdk8-slim
MAINTAINER ThinkGem@163.com
<content><![CDATA[FROM openjdk:8-slim
LABEL maintainer="ThinkGem@163.com"
ENV TZ "Asia/Shanghai"
ENV LANG C.UTF-8
VOLUME /tmp
WORKDIR /app
#RUN mkdir WEB-INF
#ADD jeesite.lic ./WEB-INF
ADD ./maven/web.war ./app.war
RUN jar -xvf app.war
#RUN chmod -R 755 ./*
WORKDIR /app/WEB-INF
ADD ./app.yml ./classes/config/bootstrap-prod.yml
#ADD jeesite.lic ./
#ENV JAVA_OPTS "-Xms256m -Xmx1024m"
#ENV JAVA_OPTS "$JAVA_OPTS -Xms256m -Xmx1024m"
ENV JAVA_OPTS "$JAVA_OPTS -Dspring.profiles.active=prod"
ENTRYPOINT java $JAVA_OPTS -cp /app $JAVA_OPTS org.springframework.boot.loader.WarLauncher
ENTRYPOINT jar -xvf app.war && rm app.war && cd WEB-INF && sh startup.sh
EXPOSE 8983
#docker run -p 8983:8983 com.jeesite/jeesite-cloud-module-${module.moduleCode}:4.2
#docker run -p 8983:8983 thinkgem/jeesite-cloud-module-${module.moduleCode}:4.4
]]>
</content>
</template>

View File

@@ -1,62 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
No deletion without permission, or be held responsible to law. -->
<template>
<name>app</name>
<filePath>${module.moduleCode}/${module.moduleCode}/bin/docker</filePath>
<fileName>app</fileName>
<content><![CDATA[
#======================================#
#========== Cloud settings ============#
#======================================#
# 服务注册
eureka:
# 实例设置
instance:
# 实例主机名称
hostname: 10.0.2.15
# 实例是否允许使用IP
preferIpAddress: false
# 客户端设置
client:
# 注册中心地址(集群时指定另外一个注册中心地址)
serviceUrl.defaultZone: http://10.0.2.15:8970/eureka/
#======================================#
#========== Spring settings ===========#
#======================================#
spring:
# 分布式配置中心
cloud:
config:
discovery:
enabled: true
serviceId: jeesite-cloud-config
# Consul 服务发现
consul:
host: 10.0.2.15
port: 8500
discovery:
hostname: 10.0.2.15
preferIpAddress: false
# 服务注册和配置
nacos:
discovery:
server-addr: 10.0.2.15:8848
config:
server-addr: 10.0.2.15:8848
file-extension: yml
group: jeesite-cloud-43
ext-config:
- data-id: application.yml
group: jeesite-cloud-43
]]>
</content>
</template>

View File

@@ -28,10 +28,11 @@ rem 打包Web工程结束
rem 根据情况修改 web.jar 为您的 jar 包名称
mkdir web
copy web.war web
cd web
mkdir app
copy web.war app
cd app
jar -xvf web.war
del web.war
cd WEB-INF
call startup.bat

View File

@@ -25,10 +25,11 @@ cd target
# 根据情况修改 web.jar 为您的 jar 包名称
mkdir web
cp web.war ./web
cd web
mkdir app
cp web.war ./app
cd app
jar -xvf web.war
rm web.war
cd WEB-INF
exec ./startup.sh
]]>

View File

@@ -88,23 +88,13 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
</plugin> -->
<!-- 打包插件, war包名称不带版本号 -->
<!-- war插件war包名称不带版本号 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!-- <packagingExcludes></packagingExcludes>
<warSourceExcludes></warSourceExcludes> -->
<webappDirectory>\${project.build.directory}/\${project.artifactId}</webappDirectory>
<warName>\${finalName}</warName>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
</plugin>

View File

@@ -17,13 +17,13 @@
</div>
</div>
<div class="box-body">
<#form:form id="searchForm" model="${area}" action="${ctx}/sys/area/listPageData" method="post" class="form-inline hide"
data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
<div class="form-group">
<label class="control-label">区域代码:</label>
<div class="control-inline">
<#form:input path="areaCode" maxlength="100" class="form-control"/>
</div>
<#form:form id="searchForm" model="${area}" action="${ctx}/sys/area/listPageData" method="post" class="form-inline hide"
data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
<div class="form-group">
<label class="control-label">区域代码:</label>
<div class="control-inline">
<#form:input path="areaCode" maxlength="100" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="control-label">区域名称:</label>
@@ -36,11 +36,11 @@
<div class="control-inline width-60">
<#form:select path="status" dictType="sys_search_status" blankOption="true" class="form-control isQuick"/>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">查询</button>
<button type="reset" class="btn btn-default btn-sm">重置</button>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">查询</button>
<button type="reset" class="btn btn-default btn-sm">重置</button>
</div>
</#form:form>
<table id="dataGrid"></table>
<div id="dataGridPage"></div>

View File

@@ -48,7 +48,7 @@
$('#dataGrid').dataGrid({
searchForm: $("#searchForm"),
columnModel: [
{header:'${text("用户名称")}', name:'userName', index:'a.create_by_name', width:100, align:"center", formatter: function(val, obj, row, act){
{header:'${text("用户名称")}', name:'userName', index:'userName', width:100, align:"center", formatter: function(val, obj, row, act){
return '<span title="${text("账号")}'+(row.userCode||'')+'">'+(val||'${text("游客")}');
}},
{header:'${text("创建时间")}', name:'startTimestamp', firstsortorder:'desc', width:100, align:'center'},
@@ -56,10 +56,10 @@ $('#dataGrid').dataGrid({
{header:'${text("超时时间")}', name:'timeout', width:100, align:'center'},
{header:'${text("客户主机")}', name:'host', width:70, align:'center'},
{header:'${text("用户类型")}', name:'userType', width:50, align:'center', formatter: function(val, obj, row, act){
return js.getDictLabel(${@DictUtils.getDictListJson('sys_user_type')}, val, '未', true);
return js.getDictLabel(${@DictUtils.getDictListJson('sys_user_type')}, val, '未设置', true);
}},
{header:'${text("设备类型")}', name:'deviceType', width:50, align:'center', formatter: function(val, obj, row, act){
return js.getDictLabel(${@DictUtils.getDictListJson('sys_device_type')}, val, '未', true);
return js.getDictLabel(${@DictUtils.getDictListJson('sys_device_type')}, val, '未设置', true);
}}
<% if(hasPermi('sys:online:edit')){ %>
,{header:'${text("操作")}', name:'actions', width:100, sortable:false, formatter: function(val, obj, row, act){

View File

@@ -1,9 +1,9 @@
<% layout('/layouts/default.html', {title: '系统管理员', libs: ['validate','dataGrid']}){ %>
<% layout('/layouts/default.html', {title: '租户管理员', libs: ['validate','dataGrid']}){ %>
<div class="main-content">
<div class="box box-main">
<div class="box-header with-border">
<div class="box-title">
<i class="fa icon-badge"></i> ${text(user.isNewRecord ? op == 'addCorp' ? '新增租户管理员' : '新增管理员' : '编辑管理员')}
<i class="fa icon-badge"></i> ${text(user.isNewRecord ? '新增管理员' : '编辑管理员')}
</div>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>

View File

@@ -1,15 +1,15 @@
<% layout('/layouts/default.html', {title: '系统管理员', libs: ['dataGrid']}){ %>
<% layout('/layouts/default.html', {title: '租户管理员', libs: ['dataGrid']}){ %>
<div class="main-content">
<div class="box box-main">
<div class="box-header">
<div class="box-title">
<i class="fa icon-badge"></i> ${text('系统管理员')}
<i class="fa icon-badge"></i> ${text('租户管理员')}
</div>
<div class="box-tools pull-right">
<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
<% if(hasPermi('sys:corpAdmin:edit')){ %>
<% if(@Global.getConfigToBoolean('user.useCorpModel', 'false')){ %>
<a href="${ctx}/sys/corpAdmin/form?op=addCorp" class="btn btn-default btnTool" title=" ${text('新增租户管理员')}"><i class="fa fa-plus"></i> ${text('新增租户管理员')}</a>
<a href="${ctx}/sys/corpAdmin/form?op=addCorp" class="btn btn-default btnTool" title=" ${text('新增管理员')}"><i class="fa fa-plus"></i> ${text('新增管理员')}</a>
<% }else{ %>
<a href="${ctx}/sys/corpAdmin/form?corpCode_=${user.currentUser.corpCode_}&corpName_=${user.currentUser.corpName_}&op=addAdmin" class="btn btn-default btnTool" title="${text('新增管理员')}"><i class="fa fa-plus"></i> ${text('新增管理员')}</a>
<% } %>
@@ -18,19 +18,19 @@
</div>
</div>
<div class="box-body">
<#form:form id="searchForm" model="${user}" action="${ctx}/sys/corpAdmin/listData" method="post" class="form-inline "
data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
<div class="form-group">
<label class="control-label">${text('登录账号')}</label>
<div class="control-inline">
<#form:input path="loginCode" maxlength="100" class="form-control width-90"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('用户昵称')}</label>
<div class="control-inline">
<#form:input path="userName" maxlength="100" class="form-control width-90"/>
</div>
<#form:form id="searchForm" model="${user}" action="${ctx}/sys/corpAdmin/listData" method="post" class="form-inline "
data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
<div class="form-group">
<label class="control-label">${text('登录账号')}</label>
<div class="control-inline">
<#form:input path="loginCode" maxlength="100" class="form-control width-90"/>
</div>
</div>
<div class="form-group">
<label class="control-label">${text('用户昵称')}</label>
<div class="control-inline">
<#form:input path="userName" maxlength="100" class="form-control width-90"/>
</div>
</div>
<div class="form-group ${@Global.getConfigToBoolean('user.useCorpModel', 'false')?'':'hide'}">
<label class="control-label">${text('租户代码')}</label>
@@ -49,10 +49,10 @@
<div class="control-inline width-90">
<#form:select path="status" dictType="sys_user_status" blankOption="true" class="form-control isQuick"/>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
</div>
</#form:form>
<table id="dataGrid"></table>

View File

@@ -22,7 +22,7 @@
<div class="col-sm-offset-1 col-sm-3"><br/>
<div class="box-body box-profile">
<img id="avatarImg" class="profile-user-img img-responsive img-circle"
src="${@user.getAvatarUrl().replaceFirst('/ctxPath', ctxPath)}">
src="${@user.getAvatarUrl().replaceFirst('/ctxPath', ctxPath)}?__t=${date().time}">
<h3 class="profile-username text-center">${user.userName}</h3>
<p class="text-muted text-center">
<#form:radio path="sex" dictType="sys_user_sex" class="form-control required"/>

View File

@@ -4,7 +4,7 @@ productName: JeeSite Demo
companyName: ThinkGem
# 产品版本、版权年份
productVersion: V4.3
productVersion: V4.4
copyrightYear: 2022
# 数据库连接

View File

@@ -1,19 +0,0 @@
@echo off
rem /**
rem * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
rem * No deletion without permission, or be held responsible to law.
rem *
rem * Author: ThinkGem@163.com
rem */
echo.
echo [<5B><>Ϣ] <20><><EFBFBD>𹤳̰汾<CCB0><E6B1BE>Nexus<75><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
call mvn clean deploy -Dmaven.test.skip=true -Pdeploy
cd bin
pause

View File

@@ -1,16 +0,0 @@
#!/bin/sh
# /**
# * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
# * No deletion without permission, or be held responsible to law.
# *
# * Author: ThinkGem@163.com
# *
# */
echo ""
echo "[信息] 部署工程版本到Nexus服务器。"
echo ""
cd ..
mvn clean deploy -Dmaven.test.skip=true -Pdeploy
cd bin

View File

@@ -1,19 +0,0 @@
@echo off
rem /**
rem * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
rem * No deletion without permission, or be held responsible to law.
rem *
rem * Author: ThinkGem@163.com
rem */
echo.
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>jar<61><72><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
call mvn clean install -Dmaven.test.skip=true -Ppackage
cd bin
pause

View File

@@ -1,16 +0,0 @@
#!/bin/sh
# /**
# * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
# * No deletion without permission, or be held responsible to law.
# *
# * Author: ThinkGem@163.com
# *
# */
echo ""
echo "[信息] 打包Web工程生成war/jar包文件。"
echo ""
cd ..
mvn clean install -Dmaven.test.skip=true -Ppackage
cd bin

File diff suppressed because it is too large Load Diff

View File

@@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.4.0-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
<!-- ====== 这是一个新增模块示例项目,你可以拷贝此项目,修改 artifactId 为您的模块即可 ====== -->
<!-- <relativePath>../parent/pom.xml</relativePath> /jeesite -->
<!-- <relativePath>../../parent/pom.xml</relativePath> /jeesite/modules -->
<!-- <relativePath>../../jeesite/parent/pom.xml</relativePath> /jeesite- -->
<!-- <relativePath>../../../jeesite/parent/pom.xml</relativePath> /jeesite-/modules -->
</parent>
<artifactId>jeesite-module-template</artifactId>
<packaging>jar</packaging>
<name>JeeSite Module Template</name>
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<properties>
</properties>
<dependencies>
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-module-core</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
</plugins>
</build>
<developers>
<developer>
<id>thinkgem</id>
<name>WangZhen</name>
<email>thinkgem at 163.com</email>
<roles><role>Project lead</role></roles>
<timezone>+8</timezone>
</developer>
</developers>
<organization>
<name>JeeSite</name>
<url>http://jeesite.com</url>
</organization>
</project>

View File

@@ -1,4 +0,0 @@
# 温馨提示不建议直接修改此文件为了平台升级方便建议将需要修改的参数值复制到application.yml里进行覆盖该参数值。
#template:
# enabled: true

View File

@@ -1,9 +0,0 @@
4.2.0
4.2.1
4.2.2
4.2.3
4.3.0
4.3.1
4.3.2
4.3.3
4.4.0

View File

@@ -6,12 +6,12 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.10</version>
<version>2.5.13</version>
</parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.4.0-SNAPSHOT</version>
<version>4.4.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>JeeSite Parent</name>
@@ -19,48 +19,44 @@
<inceptionYear>2013-Now</inceptionYear>
<properties>
<!-- common version setting -->
<commons-io.version>2.7</commons-io.version>
<commons-fileupload.version>1.4</commons-fileupload.version>
<commons-beanutils.version>1.9.4</commons-beanutils.version>
<commons-io.version>2.11.0</commons-io.version>
<commons-text.version>1.9</commons-text.version>
<!-- <ant.version>1.10.7</ant.version> -->
<commons-beanutils.version>1.9.4</commons-beanutils.version>
<fst.version>2.57</fst.version>
<fastjson.version>1.2.78</fastjson.version>
<jackson.version>2.13.0</jackson.version>
<!-- <dom4j.version>2.1.1</dom4j.version> -->
<!-- <jsoup.version>1.12.2</jsoup.version> -->
<fastjson.version>1.2.80</fastjson.version>
<commons-email.version>1.5</commons-email.version>
<activation.version>1.1.1</activation.version>
<!-- <jackson.version>2.12.6</jackson.version> -->
<!-- <activation.version>1.1.1</activation.version> -->
<UserAgentUtils.version>1.21</UserAgentUtils.version>
<!-- <metadata-extractor.version>2.11.0</metadata-extractor.version> -->
<thumbnailator.version>0.4.14</thumbnailator.version>
<twelvemonkeys.version>3.7.0</twelvemonkeys.version>
<thumbnailator.version>0.4.17</thumbnailator.version>
<twelvemonkeys.version>3.8.2</twelvemonkeys.version>
<blade-patchca.version>1.1.2</blade-patchca.version>
<jmimemagic.version>0.1.5</jmimemagic.version>
<zxing.version>3.4.1</zxing.version>
<poi.version>4.1.2</poi.version>
<pinyin4j.version>2.5.1</pinyin4j.version>
<groovy.version>3.0.9</groovy.version>
<groovy.version>3.0.10</groovy.version>
<!-- framework version setting -->
<mybatis.version>3.5.9</mybatis.version>
<mybatis-spring.version>2.0.6</mybatis-spring.version>
<jsqlparser.version>4.3</jsqlparser.version>
<druid.version>1.2.8</druid.version>
<shiro.version>1.8.0</shiro.version>
<jsqlparser.version>4.4</jsqlparser.version>
<druid.version>1.2.9</druid.version>
<shiro.version>1.9.0</shiro.version>
<j2cache.version>2.8.0-release</j2cache.version>
<swagger.version>1.6.0</swagger.version>
<log4j2.version>2.17.1</log4j2.version>
<log4j2.version>2.17.0</log4j2.version>
<!-- jdbc setting -->
<!-- <mysql.version>5.1.49</mysql.version> -->
<mysql.version>8.0.27</mysql.version>
<mysql.version>8.0.29</mysql.version>
<!-- environment setting -->
<java.version>1.8</java.version>
<tomcat.version>9.0.58</tomcat.version>
<!-- <tomcat.version>9.0.58</tomcat.version> -->
<maven.test.skip>true</maven.test.skip>
<maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version><!-- 降级到该版本新版本可能会出现VM崩溃 -->
<eclipse-plugin-download-sources>false</eclipse-plugin-download-sources>
@@ -68,123 +64,99 @@
<!-- docker setting -->
<docker.dockerHost>http://192.168.56.102:2375</docker.dockerHost>
<docker.imageName>${project.groupId}/${project.artifactId}:4.3</docker.imageName>
<docker.imageName>thinkgem/${project.artifactId}:4.3</docker.imageName>
<docker.run.port>8980:8980</docker.run.port>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Compiler 插件, 设定JDK版本 -->
<!-- compiler插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<showWarnings>true</showWarnings>
<!-- <compilerArguments> -->
<!-- <verbose /> 输出有关编译器正在执行的操作的消息 -->
<!-- <bootclasspath>${JAVA_HOME}\jre\lib\rt.jar;${JAVA_HOME}\jre\lib\jce.jar</bootclasspath> -->
<!-- </compilerArguments> -->
</configuration>
</plugin>
<!-- 打包jar文件时配置manifest文件加入lib包的jar依赖 -->
<!-- jar插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- <encoding>${project.build.sourceEncoding}</encoding> -->
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
<executions>
<execution>
<!-- <phase>prepare-package</phase>
<goals>
<goal>jar</goal>
</goals> -->
<configuration>
<!-- <classesDirectory>${project.outputDirectory}</classesDirectory>
<finalName>${finalName}</finalName>
<outputDirectory>${project.build.directory}/${project.artifactId}/WEB-INF/lib</outputDirectory>
<includes>
<include>com/thinkgem/jeesite/**</include>
</includes> -->
<archive>
<manifest>
<!-- Add directory entries -->
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<!-- resource插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
<!-- install插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
</plugin>
<!-- clean插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
</plugin>
<!-- ant插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
<!-- dependency插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<!-- 测试用例插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 打包插件, war包名称不带版本 -->
<!-- compiler插件设定JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<showWarnings>true</showWarnings>
<!-- <compilerArguments>
<verbose /> 输出有关编译器正在执行的操作的消息
<bootclasspath>${JAVA_HOME}\jre\lib\rt.jar;${JAVA_HOME}\jre\lib\jce.jar</bootclasspath>
</compilerArguments> -->
</configuration>
</plugin>
<!-- jar插件配置manifest文件加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
<executions>
<execution>
<configuration>
<excludes>
<exclude>userfiles/**</exclude>
</excludes>
<finalName>${project.artifactId}</finalName>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<!-- war插件war包名称不带版本号 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<warSourceExcludes>
WEB-INF/classes/*.lic,
userfiles/**
</warSourceExcludes>
<webappDirectory>${project.build.directory}/${project.artifactId}</webappDirectory>
@@ -194,7 +166,7 @@
</archive>
</configuration>
</plugin>
<!-- Eclipse 插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -218,7 +190,7 @@
</additionalProjectnatures>
</configuration>
</plugin>
<!-- Java Document Generate -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -230,13 +202,13 @@
<goals>
<goal>jar</goal>
</goals>
<configuration>
<!-- <configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</configuration> -->
</execution>
</executions>
</plugin>
<!-- JavaScript CSS Compress -->
<plugin>
<groupId>com.jeesite.maven</groupId>
@@ -267,11 +239,12 @@
</excludes>
</configuration>
</plugin>
<!-- 依赖插件
<!-- Eclipse m2e settings only -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
@@ -279,7 +252,7 @@
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>[1.0.0,)</versionRange>
<versionRange>${maven-dependency-plugin.version}</versionRange>
<goals>
<goal>copy-dependencies</goal>
</goals>
@@ -291,13 +264,13 @@
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin> -->
<!-- Docker 插件 -->
</plugin>
<!-- Docker 插件 https://github.com/fabric8io/docker-maven-plugin -->
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<version>0.39.1</version>
<configuration>
<dockerHost>${docker.dockerHost}</dockerHost>
<verbose>true</verbose>
@@ -323,11 +296,11 @@
</images>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<!-- 资源文件配置 -->
<resources>
<resource>
@@ -343,7 +316,7 @@
</excludes>
</resource>
</resources>
</build>
<developers>

34
pom.xml Normal file
View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jeesite</groupId>
<artifactId>jeesite</artifactId>
<version>4.4.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>JeeSite</name>
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>
<modules>
<module>root</module>
</modules>
<developers>
<developer>
<id>thinkgem</id>
<name>WangZhen</name>
<email>thinkgem at 163.com</email>
<roles><role>Project lead</role></roles>
<timezone>+8</timezone>
</developer>
</developers>
<organization>
<name>JeeSite</name>
<url>http://jeesite.com</url>
</organization>
</project>

View File

@@ -5,10 +5,10 @@
<groupId>com.jeesite</groupId>
<artifactId>jeesite-root</artifactId>
<version>4.4.0-SNAPSHOT</version>
<version>4.4.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>JeeSite</name>
<name>JeeSite Root</name>
<url>http://jeesite.com</url>
<inceptionYear>2013-Now</inceptionYear>

View File

@@ -1,15 +1,15 @@
# 服务条款
# 服务条款:
1. 不得将 JeeSite 应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
2. 关于底层未开源代码,我们保证不添加任何数据安全性控制代码,请放心使用。但您也需了解使用本软件的风险,
是软件皆有漏洞任何软件都无法保证100%没有漏洞。请软件上线使用前进行足够的安全检测。
3. 付费之前请确认已通过社区版或免费版了解和试用本产品,并确认产品功能符合您的需求。付费之后源代码与
社区版本相同,无需另外的源代码。已提供技术服务支持或许可文件一经发出均不提供退货服务。
3. 付费之前请确认已通过社区版或免费版了解和试用本产品,并确认产品功能符合您的需求。
已提供商业代码、内部资料、技术服务支持或许可文件一经发出均不提供退货服务。
4. 基于 JeeSite 开发的项目或产品名称以及公司名称,同意支持 JeeSite 推广的案例公布,谢谢您的支持。
5. 若您已经购买本产品许可文件或以其它方式使用本产品,将被视为您对本服务条款全部的完全接受,如果您未
能遵守本服务条款,您的许可授权将被终止,许可的权利将被收回,同时您应承担相应法律责任。
# 联系方式
# 联系方式
商务1QQ1766571055
商务2QQ1928733133
网址http://s.jeesite.com

View File

@@ -1,19 +1,19 @@
@echo off
rem /**
rem * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
rem * Copyright (c) 2013-Now http://jeesite.com All rights reserved.s
rem * No deletion without permission, or be held responsible to law.
rem *
rem * Author: ThinkGem@163.com
rem */
echo.
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD>Web<65><62><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD>Docker<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD>Web<65><62><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>Docker<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
call mvn clean package docker:stop docker:remove docker:build docker:run -Dmaven.test.skip=true -U
call mvn clean package docker:remove docker:build -Dmaven.test.skip=true -U
cd bin
pause

View File

@@ -7,10 +7,10 @@
# *
# */
echo ""
echo "[信息] 使用 Spring Boot Docker 编译 Web 工程。"
echo "[信息] 打包Web工程编译Docker镜像。"
echo ""
cd ..
mvn clean package docker:stop docker:remove docker:build docker:run -Dmaven.test.skip=true -U
mvn clean package docker:remove docker:build -Dmaven.test.skip=true -U
cd bin

View File

@@ -1,25 +1,21 @@
FROM frolvlad/alpine-java:jdk8-slim
MAINTAINER ThinkGem@163.com
FROM openjdk:8-slim
LABEL maintainer="ThinkGem@163.com"
ENV TZ "Asia/Shanghai"
ENV LANG C.UTF-8
VOLUME /tmp
VOLUME /data
WORKDIR /app
#RUN mkdir WEB-INF
#ADD jeesite.lic ./WEB-INF
ADD ./maven/web.war ./app.war
RUN jar -xvf app.war
#RUN chmod -R 755 ./*
WORKDIR /app/WEB-INF
ADD ./app.yml ./classes/config/application-prod.yml
#ADD jeesite.lic ./
#ENV JAVA_OPTS "-Xms256m -Xmx1024m"
#ENV JAVA_OPTS "$JAVA_OPTS -Xms256m -Xmx1024m"
ENV JAVA_OPTS "$JAVA_OPTS -Dspring.profiles.active=prod"
ENTRYPOINT java $JAVA_OPTS -cp /app $JAVA_OPTS org.springframework.boot.loader.WarLauncher
ENTRYPOINT jar -xvf app.war && rm app.war && cd WEB-INF && sh startup.sh
EXPOSE 8980
#docker run -p 8980:8980 com.jeesite/jeesite-web:4.3
#docker run -p 8980:8980 thinkgem/jeesite-web:4.4

View File

@@ -1,26 +0,0 @@
# 数据库连接
jdbc:
# Mysql 数据库配置
type: mysql
driver: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.56.1:3306/jeesite?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai
username: jeesite
password: jeesite
testSql: SELECT 1
# MyBatis 相关
mybatis:
# Mapper文件刷新线程
mapper:
refresh:
enabled: false
# 文件相关
file:
# 文件上传根路径设置路径中不允许包含“userfiles”在指定目录中系统会自动创建userfiles目录如果不设置默认为contextPath路径
baseDir: /root

View File

@@ -20,10 +20,11 @@ rem
rem <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD> web.jar Ϊ<><CEAA><EFBFBD><EFBFBD> jar <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mkdir web
copy web.war web
cd web
mkdir app
copy web.war app
cd app
jar -xvf web.war
del web.war
cd WEB-INF
call startup.bat

View File

@@ -18,9 +18,10 @@ cd target
# 根据情况修改 web.jar 为您的 jar 包名称
mkdir web
cp web.war ./web
cd web
mkdir app
cp web.war ./app
cd app
jar -xvf web.war
rm web.war
cd WEB-INF
exec ./startup.sh

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-parent</artifactId>
<version>4.4.0-SNAPSHOT</version>
<version>4.4.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
@@ -90,23 +90,13 @@
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
</plugin> -->
<!-- 打包插件, war包名称不带版本号 -->
<!-- war插件war包名称不带版本号 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!-- <packagingExcludes></packagingExcludes>
<warSourceExcludes></warSourceExcludes> -->
<webappDirectory>${project.build.directory}/${project.artifactId}</webappDirectory>
<warName>${finalName}</warName>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
</plugin>

View File

@@ -1,35 +1,41 @@
# 使用环境配置,只需 JVM 参数里加:-Dspring.profiles.active=prod
#======================================#
#========== Server settings ===========#
#======================================#
server:
port: 8980
servlet:
context-path: /js
#======================================#
#========== Database sttings ==========#
#======================================#
# 数据库连接
jdbc:
# Mysql 数据库配置
type: mysql
driver: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jeesite?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai
username: root
password: 123456
url: jdbc:mysql://192.168.56.1:3306/jeesite?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai
username: jeesite
password: jeesite
testSql: SELECT 1
#======================================#
#========== Spring settings ===========#
#======================================#
# 数据库连接池配置
pool:
# 初始化连接数
init: 1
# 最小连接数
minIdle: 3
# 最大连接数
maxActive: 20
# 日志配置
logging:
config: classpath:config/logback-spring-prod.xml
config: classpath:config/logback-spring-prod.xml
# MyBatis 相关
mybatis:
# Mapper文件刷新线程
mapper:
refresh:
enabled: false

View File

@@ -8,10 +8,10 @@ productName: JeeSite Demo
companyName: ThinkGem
# 产品版本、版权年份
productVersion: V4.3
productVersion: V4.4
copyrightYear: 2022
#是否演示模式
# 是否演示模式
demoMode: false
#======================================#
@@ -23,6 +23,7 @@ server:
port: 8980
servlet:
context-path: /js
register-default-servlet: false
tomcat:
uri-encoding: UTF-8
# 表单请求数据的最大大小
@@ -35,7 +36,7 @@ server:
# threads:
# max: 200
# min-spare: 10
# 当 Nginx 为 httpstomcat 为 http 时,设置该选项为 true
schemeHttps: false
@@ -49,7 +50,7 @@ jdbc:
# Mysql 数据库配置
type: mysql
driver: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jeesite?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai
url: jdbc:mysql://127.0.0.1:3306/jeesite?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
username: root
password: 123456
testSql: SELECT 1
@@ -94,28 +95,28 @@ jdbc:
# password: jeesite
# testSql: SELECT 1
# # 连接信息加密
# encrypt:
#
# # 加密连接用户名
# username: false
# # 加密连接密码
# password: true
#
# # 数据库连接池配置
# pool:
#
# # 初始化连接数
# init: 1
# # 最小空闲连接数
# minIdle: 3
# # 最大激活连接数
# maxActive: 20
#
# 连接信息加密
encrypt:
# 加密连接用户名
username: false
# 加密连接密码
password: true
# 数据库连接池配置
pool:
# 初始化连接数
init: 1
# 最小空闲连接数
minIdle: 3
# 最大激活连接数
maxActive: 20
# # 获取连接等待超时时间单位毫秒1分钟4.0.6+
# maxWait: 60000
#
# # 从池中取出连接前进行检验如果检验失败则从池中去除连接并尝试取出另一个4.0.6+
# # 从池中取出和归还连接前进行检验如果检验失败则从池中去除连接并尝试取出另一个4.0.6+
# testOnBorrow: false
# testOnReturn: false
#
@@ -127,7 +128,7 @@ jdbc:
# # 一个连接在池中最大空闲的时间单位毫秒30分钟4.1.2+
# maxEvictableIdleTimeMillis: 1800000
#
# #连接池中的minIdle数量以内的连接空闲时间超过minEvictableIdleTimeMillis则会执行keepAlive操作4.1.8+
# # 连接池中的minIdle数量以内的连接空闲时间超过minEvictableIdleTimeMillis则会执行keepAlive操作4.1.8+
# keepAlive: false
#
# # 是否自动回收泄露的连接和超时时间单位秒35分钟4.0.6+
@@ -146,11 +147,10 @@ jdbc:
# readDataSourceNames: ds_read_01, ds_read_02
# # 负载均衡算法ROUND_ROBIN轮询、RANDOM随机、自定义类名
# loadBalancerAlgorithm: RANDOM
#
# # 多数据源名称列表,多个用逗号隔开,使用方法:@MyBatisDao(dataSourceName="ds2")
# dataSourceNames: ds_read_01, ds_read_02, ds2
# dataSourceNames: ds2
# dataSourceNames: ds_read_01, ds_read_02
#
# # 默认数据源的从库01
# ds_read_01:
# type: mysql
@@ -176,7 +176,10 @@ jdbc:
# init: 1
# minIdle: 3
# maxActive: 20
#
# # 多数据源名称列表,多个用逗号隔开,使用方法:@MyBatisDao(dataSourceName="ds2")
# dataSourceNames: ds2
#
# # 多数据源配置ds2
# ds2:
# type: mysql
@@ -222,7 +225,12 @@ jdbc:
# # 事务超时时间单位秒30分钟v4.1.5+
# transactionTimeout: 1800
#
# # 表名和字段名(前缀|后缀是否强制大写v4.1.8+
# tableAndColumn:
# prefixSuffix: "`|`"
# forceUpperCase: true
#
# # 表名前缀
# tablePrefix: js_
@@ -262,9 +270,15 @@ spring:
# # 缓存配置
# cache:
# # 缓存及会话共享(专业版)
# isClusterMode: false
# isClusterMode: true
# # 清理全部缓存按钮所清理的缓存列表
# clearNames: sysCache,corpCache,userCache,cmsCache,msgPcPoolCache,roleCache,fileUploadCache,bpmFormCache
# clearNames: sysCache,corpCache,userCache,roleCache,fileUploadCache,msgPcPoolCache,cmsCache,bpmFormCache
# # 用户缓存
# userCache:
# clearTaskPool:
# corePoolSize: 5
# maxPoolSize: 20
# keepAliveSeconds: 60
# 日志配置
logging:
@@ -282,7 +296,7 @@ logging:
# 分页相关
#page:
#
#
# # 默认每页显示的数据条数
# pageSize: 20
#
@@ -290,8 +304,8 @@ logging:
# maxPageSize: 999
# 用户相关
#user:
#
user:
# # 指定超级管理员编号(研发团队使用的账号)
# superAdminCode: system
#
@@ -303,10 +317,10 @@ logging:
#
# # 二级管理员的控制权限类型1拥有的权限 2管理的权限管理功能包括用户管理、组织机构、公司管理等v4.1.5+
# adminCtrlPermi: 2
#
# # 多租户模式SAAS模式专业版
# useCorpModel: false
#
# 多租户模式SAAS模式专业版
useCorpModel: false
# # 登录账号是否租户内唯一,否则全局唯一
# loginCodeCorpUnique: false
#
@@ -356,16 +370,16 @@ logging:
# expandLevel: -1,
# remarks: ""
# }]
#
#
# # 数据权限调试模式(会输出一些日志)
# dataScopeDebug: false
#
#
# # 数据权限使用 API 方式实现(适应 Cloud 环境,基础用户表与业务数据表跨库的情况)
# # 开启后设置 ctrlDataAttrName 加 AndChildren 后缀ctrlDataParentCodesAttrName 清空
# # 以方便读取树结构数据权限的表时包含子节点,举例如下:
# # ctrlDataAttrName: "officeCodesAndChildren", ctrlDataParentCodesAttrName: ""
# dataScopeApiMode: false
# 角色管理
#role:
# # 扩展数据权限定义3本部门4本公司5本部门和本公司
@@ -419,18 +433,18 @@ logging:
# updateStatusByModuleStatus: false
# 国际化管理(专业版)
#lang:
# enabled: false
#
lang:
enabled: false
# # 默认语言4.1.3+
# defaultLocale: zh_CN
# # 默认时区4.1.3+
# defaultTimeZone: GMT+08:00
# 任务调度(标准版)
#job:
# enabled: false
#
job:
enabled: false
# # 是否自动启动任务调度(可关闭)
# autoStartup: true
#
@@ -455,7 +469,8 @@ logging:
# isClustered: true
# dataSourceName: job
# clusterCheckinInterval: 1000
#
# className: org.springframework.scheduling.quartz.LocalDataSourceJobStore
# # 调度日志
# log:
# # 计划调度日志
@@ -473,15 +488,15 @@ logging:
# enabled: false
# 代码生成
#gen:
# enabled: true
#
gen:
enabled: true
# # 表名字段名是否强制小写
# forceLowerCase: true
# 系统监控
#state:
# enabled: true
state:
enabled: true
#======================================#
#========= Framework settings =========#
@@ -490,37 +505,41 @@ logging:
# Shiro 相关
shiro:
# #索引页路径
# defaultPath: ${shiro.loginUrl}
#
# # 登录相关设置
# loginUrl: ${adminPath}/login
# logoutUrl: ${shiro.loginUrl}
# successUrl: ${adminPath}/index
#
## # Apereo CAS 相关配置(标准版)
## casServerUrl: http://127.0.0.1:8981/cas
## casClientUrl: http://127.0.0.1:8980/js
## loginUrl: ${shiro.casServerUrl}?service=${shiro.casClientUrl}${adminPath}/login-cas
## logoutUrl: ${shiro.casServerUrl}/logout?service=${shiro.loginUrl}
## successUrl: ${shiro.casClientUrl}${adminPath}/index
#
# # 简单 SSO 登录相关配置
# sso:
# # 如果启用/sso/{username}/{token}单点登录请修改此安全key并与单点登录系统key一致。
# secretKey: ~
# # 是否加密单点登录安全Key
# encryptKey: true
# # token 时效性1天yyyyMMdd、1小时yyyyMMddHH、1分钟yyyyMMddHHmm
# encryptKeyDateFormat: yyyyMMdd
#
# # 登录提交信息加密(如果不需要加密,设置为空即可)
# loginSubmit:
# # 加密用户名、密码、验证码后再提交key设置为3个用逗号分隔加密方式DES4.1.9及之前版本默认设置)
# # v4.2.0+ 开始支持 Base64 加密方式,方便移动端及第三方系统处理认证,可直接设置 Key 为 Base644.2.0+默认设置)
# #secretKey: thinkgem,jeesite,com
# secretKey: Base64
# #secretKey: ~
# 页路径
defaultPath: ${shiro.loginUrl}
# 登录相关设置
loginUrl: ${adminPath}/login
logoutUrl: ${shiro.loginUrl}
successUrl: ${adminPath}/index
# # Apereo CAS 相关配置(标准版)
# casServerUrl: http://127.0.0.1:8981/cas
# casClientUrl: http://127.0.0.1:8980/js
# loginUrl: ${shiro.casServerUrl}?service=${shiro.casClientUrl}${adminPath}/login-cas
# logoutUrl: ${shiro.casServerUrl}/logout?service=${shiro.loginUrl}
# successUrl: ${shiro.casClientUrl}${adminPath}/index
# # LDAP 相关设置(标准版)
# ldapUrl: ldap://127.0.0.1:389
# ldapUserDn: uid={0},ou=users,dc=mycompany,dc=com
# 简单 SSO 登录相关配置
sso:
# 如果启用/sso/{username}/{token}单点登录请修改此安全key并与单点登录系统key一致。
secretKey: ~
# 是否加密单点登录安全Key
encryptKey: true
# token 时效性1天yyyyMMdd、1小时yyyyMMddHH、1分钟yyyyMMddHHmm
encryptKeyDateFormat: yyyyMMdd
# 登录提交信息加密(如果不需要加密,设置为空即可)
loginSubmit:
# 加密用户名、密码、验证码后再提交key设置为3个用逗号分隔加密方式DES4.1.9及之前版本默认设置)
# v4.2.0+ 开始支持 Base64 加密方式,方便移动端及第三方系统处理认证,可直接设置 Key 为 Base644.2.0+默认设置)
#secretKey: thinkgem,jeesite,com
secretKey: Base64
#secretKey: ~
# 记住我密钥设置,你可以通过 com.jeesite.test.RememberMeKeyGen 类快速生成一个秘钥。
# 若不设置,则每次启动系统后自动生成一个新秘钥,这样会导致每次重启后,客户端记录的用户信息将失效。
@@ -547,45 +566,61 @@ shiro:
#
# # 设定允许获取的资源列表v4.2.3
# #contentSecurityPolicy: "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; img-src 'self' 'unsafe-inline' 'unsafe-eval' data:"
#
# # 是否允许跨域访问 CORS如果允许设置允许的域名。v4.2.3 开始支持多个域名和模糊匹配例如http://*.jeesite.com,http://*.jeesite.net
# #accessControlAllowOrigin: '*'
# accessControlAllowOrigin: '*'
#
# # 允许跨域访问时 CORS可以获取和返回的方法和请求头
# #accessControlAllowMethods: GET, POST, OPTIONS
# #accessControlAllowHeaders: content-type, x-requested-with, x-ajax, x-token, x-remember
# #accessControlExposeHeaders: x-remember
#
# accessControlAllowMethods: GET, POST, OPTIONS
# accessControlAllowHeaders: content-type, x-requested-with, x-ajax, x-token, x-remember
# accessControlExposeHeaders: x-remember
# # 是否允许接收跨域的Cookie凭证数据 CORS
# #accessControlAllowCredentials: false
# accessControlAllowCredentials: false
#
# # 允许的网站来源地址,不设置为全部地址(避免一些跨站点请求伪造 CSRF、防盗链
# #allowReferers: http://127.0.0.1,http://localhost
# allowReferers: http://127.0.0.1,http://localhost
#
# # 是否在登录后生成新的Session默认false
# isGenerateNewSessionAfterLogin: false
#
# # 内部系统访问过滤器可设置多个允许的内部系统IP地址串多个用逗号隔开
# innerFilter.allowIp: 127.0.0.1
#
# # URI 权限过滤器定义(自定义添加参数时,请不要移除 ${adminPath}/** = user否则会导致权限异常
# filterChainDefinitions: |
# ${adminPath}/** = user
# URI 权限过滤器定义(自定义添加参数时,请不要移除 ${adminPath}/** = user否则会导致权限异常
# 提示:填写过滤规则,请注意先后顺序,从上到下,先匹配先受用规则,匹配成功后不再继续匹配。
filterChainDefinitions: |
${adminPath}/** = user
# # URI 权限过滤器定义以下参考必须登录user可访问的地址和不需要登录anon可访问地址
# filterChainDefinitions: |
# /ReportServer/** = user
# ${adminPath}/file/** = anon
# ${adminPath}/cms/* = anon
# ${adminPath}/cms/site/select = anon
# ${adminPath}/cms/site/* = anon
# ${adminPath}/cms/category/treeData = anon
# ${adminPath}/cms/category/* = anon
# ${adminPath}/cms/article/* = anon
# ${adminPath}/cms/link/* = anon
# ${adminPath}/sys/corpAdmin/treeData = anon
# ${adminPath}/${spring.application.name}/swagger/** = anon
# ${adminPath}/** = user
# Session 相关
#session:
#
# # 会话超时时间单位毫秒10m=600000, 20m=1200000ms, 30m=1800000ms, 60m=3600000ms, 12h=43200000ms, 1day=86400000ms
# # 注意如果超时超过30m你还需要同步修改当前配置文件的属性j2cache.caffeine.region.sessionCache 超时时间,大于这个值。
#
# # 游客会话超时时间只访问了系统但未登录系统的用户为游客游客默认超时时间为10分钟未登录系统时的图片验证码有效时间。
# sessionTimeout: 180000
#
# # 登录系统后的用户超时时间(不明确 param_deviceType 参数的,默认设备为 pc 登录)
# pcSessionTimeout: 1800000
#
# # 手机APP设备会话超时参数设置登录请求参数加 param_deviceType=mobileApp 时有效,一般无需单独设置
# #mobileAppSessionTimeout: 1800000
session:
# 会话超时时间单位毫秒10m=600000, 20m=1200000ms, 30m=1800000ms, 60m=3600000ms, 12h=43200000ms, 1day=86400000ms
# 注意如果超时超过30m你还需要同步修改当前配置文件的属性j2cache.caffeine.region.sessionCache 超时时间,大于这个值。
# 游客会话超时时间只访问了系统但未登录系统的用户为游客游客默认超时时间为10分钟未登录系统时的图片验证码有效时间。
sessionTimeout: 180000
# 登录系统后的用户超时时间(不明确 param_deviceType 参数的,默认设备为 pc 登录)
pcSessionTimeout: 1800000
# # 手机APP设备会话超时参数设置登录请求参数加 param_deviceType=mobileApp 时有效,一般情况无需设置
# mobileAppSessionTimeout: 1800000
#
# # 定时清理失效会话,清理用户直接关闭浏览器造成的孤立会话(设置为 0 关闭,微服务下只开启 core 即可)
# sessionTimeoutClean: 1200000
@@ -595,12 +630,12 @@ shiro:
# #sessionIdCookiePath: ${server.servlet.context-path}
#
# # 共享的SessionId的Cookie名称保存到跟路径下第三方应用获取。同一域名下多个项目时需设置共享Cookie的名称。
# #shareSessionIdCookieName: ${session.sessionIdCookieName}
# shareSessionIdCookieName: ${session.sessionIdCookieName}
#
# # 其它 SimpleCookie 参数v4.2.3
# #sessionIdCookieSecure: false
# #sessionIdCookieHttpOnly: true
# #sessionIdCookieSameSite: LAX
# sessionIdCookieSecure: false
# sessionIdCookieHttpOnly: true
# sessionIdCookieSameSite: LAX
#
# # 设置接收 SessionId 请求参数和请求头的名称
# sessionIdParamName: __sid
@@ -612,7 +647,7 @@ shiro:
#
# # 记住我的请求参数和请求头的名称v4.2.3
# rememberMeHeaderName: x-remember
#
# 系统缓存配置
#j2cache:
#
@@ -631,6 +666,13 @@ shiro:
# channel: j2cache
# # 缓存命名空间名
# namespace: jeesite
# # 消息监听器
# listener:
# taskPool:
# corePoolSize: 8
# maxPoolSize: 20
# keepAliveSeconds: 60
# queueCapacity: 1000
#
# # 通知订阅
# broadcast:
@@ -641,28 +683,28 @@ shiro:
# cache_clean_mode: passive
# MyBatis 相关
#mybatis:
#
# # @MyBatisDao、Aliases 扫描基础包,如果多个,用“,”分隔
# scanBasePackage: com.jeesite.modules
#
mybatis:
# @MyBatisDao、Aliases 扫描基础包,如果多个,用“,”分隔
scanBasePackage: com.jeesite.modules
# # TypeHandlers 扫描基础包,如果多个,用“,”分隔
# scanTypeHandlersPackage: ~
#
# # 是否开启 JDBC 管理事务,默认 Spring 管理事务 v4.2.3
# jdbcTransaction: false
#
# # Mapper文件刷新线程
# mapper:
# refresh:
# enabled: true
# Mapper文件刷新线程
mapper:
refresh:
enabled: true
# delaySeconds: 60
# sleepSeconds: 3
# mappingPath: mappings
# Web 相关
#web:
#
web:
# # AJAX 接受参数名和请求头名v4.3.0
# ajaxParamName: __ajax
# ajaxHeaderName: x-ajax
@@ -684,41 +726,41 @@ shiro:
# favorParameter: true
# # 使用 x-ajax=json、x-ajax=xml 请求头匹配返回视图数据
# favorHeader: true
#
# # MVC 拦截器
# interceptor:
#
# # 后台管理日志记录拦截器
# log:
# enabled: true
# addPathPatterns: >
# ${adminPath}/**
# excludePathPatterns: >
# ${adminPath}/index,
# ${adminPath}/login,
# ${adminPath}/desktop,
# ${adminPath}/index/menuTree,
# ${adminPath}/sys/online/count,
# ${adminPath}/state/server/rtInfo,
# ${adminPath}/**/treeData,
# ${adminPath}/file/**,
# ${adminPath}/tags/*,
# ${adminPath}/msg/**
#
# # 前台自动切换到手机视图拦截器
# mobile:
# enabled: false
# addPathPatterns: >
# ${frontPath}/**
# excludePathPatterns: ~
#
# MVC 拦截器
interceptor:
# 后台管理日志记录拦截器
log:
enabled: true
addPathPatterns: >
${adminPath}/**
excludePathPatterns: >
${adminPath}/index,
${adminPath}/login,
${adminPath}/desktop,
${adminPath}/index/menuTree,
${adminPath}/sys/online/count,
${adminPath}/**/server/rtInfo,
${adminPath}/**/treeData,
${adminPath}/file/**,
${adminPath}/tags/*,
${adminPath}/msg/**
# 前台自动切换到手机视图拦截器
mobile:
enabled: false
addPathPatterns: >
${frontPath}/**
excludePathPatterns: ~
# # 静态文件后缀,过滤静态文件,以提高访问性能。
# staticFile: .css,.js,.map,.png,.jpg,.gif,.jpeg,.bmp,.ico,.swf,.psd,.htc,.crx,.xpi,.exe,.ipa,.apk,.otf,.eot,.svg,.ttf,.woff,.woff2
#
# # 静态文件后缀排除的url路径指定哪些uri路径不进行静态文件过滤。
# staticFileExcludeUri: /druid/
#
# # 静态资源路径前缀可做CDN加速优化
# # 静态资源路径前缀,可做 CDN 加速优化,默认前面增加 ctxPath 前缀,如果前面写 “//” 两个斜杠 或 包含 “://” 不加 ctxPath。
# staticPrefix: /static
#
# # 严格模式(更严格的数据安全验证)
@@ -728,32 +770,36 @@ shiro:
# validator:
# id: '[a-zA-Z0-9_\-/#\u4e00-\u9fa5]{0,64}'
# user.loginCode: '[a-zA-Z0-9_\u4e00-\u9fa5]{4,20}'
#
#
# # 默认的日期格式JsonMapper
# json:
# defaultDateFormat: yyyy-MM-dd HH:mm:ss
#
# # 默认不启用(为兼用旧版保留,建议使用 CORS
# jsonp:
# enabled: false
# callback: __callback
#
# # 核心模块的Web功能仅作为微服务时设为false
# core:
# enabled: true
#
# # 在线API文档工具
# swagger:
# enabled: true
# 核心模块的Web功能仅作为微服务时设为false
core:
enabled: true
# 在线API文档工具
swagger:
enabled: true
# 错误页面500.html是否输出错误信息正式环境为提供安全性可设置为false
#error:
# page:
# printErrorInfo: true
error:
page:
printErrorInfo: true
#======================================#
#======== FileUpload settings =========#
#======================================#
#file:
# enabled: true
#
file:
enabled: true
# # 文件上传根路径设置路径中不允许包含“userfiles”在指定目录中系统会自动创建userfiles目录如果不设置默认为contextPath路径
# #baseDir: D:/jeesite
#
@@ -761,7 +807,7 @@ shiro:
# uploadPath: '{yyyy}{MM}/'
#
# # 上传单个文件最大字节500M在这之上还有 > Tomcat限制 > Nginx限制此设置会覆盖 spring.http.multipart.maxFileSize 设置
# maxFileSize: 500*1024*1024
# maxFileSize: '500*1024*1024'
#
# # 设置允许上传的文件后缀(全局设置)
# imageAllowSuffixes: .gif,.bmp,.jpeg,.jpg,.ico,.png,.tif,.tiff,
@@ -769,10 +815,10 @@ shiro:
# fileAllowSuffixes: .doc,.docx,.rtf,.xls,.xlsx,.csv,.ppt,.pptx,.pdf,.vsd,.txt,.md,.xml,.rar,.zip,7z,.tar,.tgz,.jar,.gz,.gzip,.bz2,.cab,.iso,.ipa,.apk,
#
# # 允许上传的文件内容类型图片、word、excel、ppt防止修改后缀恶意上传文件默认不启用验证
## allowContentTypes: image/jpeg,image/gif,image/bmp,image/png,image/x-png,
## application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,
## application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,
## application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation
# #allowContentTypes: image/jpeg,image/gif,image/bmp,image/png,image/x-png,
# # application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,
# # application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,
# # application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation
#
# # 上传图片自动压缩宽高,指定为 -1 不进行压缩(全局设置) v4.1.7
# imageMaxWidth: 1024
@@ -791,10 +837,10 @@ shiro:
# # 是否启用检查点(支持断点续传,上传)
# checkpoint: true
#
# # 是否用文件流方式下载(支持断点续传)
# # 是否用文件流方式下载(支持断点续传,下载
# isFileStreamDown: true
#视频转码
# 视频转码
#video:
#
# # 视频格式转换 ffmpeg.exe 所放的路径
@@ -816,19 +862,24 @@ shiro:
#======================================#
# 消息提醒中心(专业版)
#msg:
# enabled: false
#
msg:
enabled: false
# # 是否开启实时发送消息(保存消息后立即检查未读消息并发送),分布式部署下请单独配置消息发送服务,不建议开启此选项。
# realtime:
# # 是否开启
# enabled: true
# # 消息实时推送任务Bean名称
# beanName: msgLocalPushTask
# # 消息推送线程池
# pushTaskPool:
# corePoolSize: 5
# maxPoolSize: 20
# keepAliveSeconds: 60
#
# # 推送失败次数,如果推送次数超过了设定次数,仍不成功,则放弃并保存到历史
# pushFailNumber: 3
#
# # 邮件发送参数
# email:
# beanName: emailSendService

View File

@@ -16,7 +16,7 @@ echo ""
CLASS_PATH="$PWD/../"
# 优化JVM参数
JAVA_OPTS="-Xms512m -Xmx1024m"
# JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx1024m"
# 方式一、配置外部自定义的属性文件(建议)
# JAVA_OPTS="$JAVA_OPTS -Dspring.config.location=$PWD/app.yml"