diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..97b98f919c862de80bd35fed7da1ad6e08b9de4f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM eclipse-temurin:21.0.1_12-jre + +MAINTAINER yanbing26@qq.com +ENV TZ=Asia/Shanghai +RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +WORKDIR / + +EXPOSE 8083 + +ADD ./target/goview_admin*.jar ./goview_admin.jar + +CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar goview_admin.jar diff --git a/pom.xml b/pom.xml index 1ef94bb0b8e1da5319627ad83c8fb9ed35dbc7c7..eb0237dddf1eb50c881f867d81e2731f9b656001 100644 --- a/pom.xml +++ b/pom.xml @@ -1,160 +1,162 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.7.6 - - - cn.com - goview_admin - 0.0.1-SNAPSHOT - war - oss - goview后台系统 - - UTF-8 - UTF-8 - 1.8 - 1.3.3 - 2.7 - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - commons-io - commons-io - ${commons.io.version} - - - - - commons-fileupload - commons-fileupload - ${commons.fileupload.version} - - - - - - com.github.xiaoymin - knife4j-spring-boot-starter - 2.0.7 - - - - - - cn.hutool - hutool-all - 5.3.3 - - - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 2.2.2 - - - - - com.baomidou - mybatis-plus - 3.4.3 - - - - com.baomidou - mybatis-plus-boot-starter - 3.4.3 - - - - com.baomidou - mybatis-plus-generator - 3.5.1 - - - - - - org.xerial - sqlite-jdbc - 3.21.0.1 - - - - org.projectlombok - lombok-maven-plugin - 1.18.20.0 - - - - - org.springframework.boot - spring-boot-devtools - true - - - - - org.freemarker - freemarker - - - - - - cn.dev33 - sa-token-spring-boot-starter - 1.34.0 - - - - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - true - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.3 + + + cn.com + goview_admin + 0.0.1-SNAPSHOT + jar + oss + goview后台系统 + + UTF-8 + UTF-8 + 21 + 1.5 + 2.7 + 1.18.30 + 1.39.0 + 1.2.23 + 4.4.0 + 5.8.32 + 3.5.7 + 3.46.1.0 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + commons-io + commons-io + ${commons.io.version} + + + com.alibaba + druid-spring-boot-3-starter + ${druid.version} + + + + commons-fileupload + commons-fileupload + ${commons.fileupload.version} + + + commons-io + commons-io + + + + + + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + ${knife4j.version} + + + + + + cn.hutool + hutool-all + ${hutool.version} + + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus.version} + + + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis-plus.version} + + + + + + org.xerial + sqlite-jdbc + ${sqlite.version} + + + org.projectlombok + lombok + ${lombok.version} + + + + org.springframework.boot + spring-boot-devtools + true + + + + + org.freemarker + freemarker + + + + + + cn.dev33 + sa-token-spring-boot3-starter + ${sa-token.version} + + + + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + true + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/cn/com/v2/common/interceptor/Interceptor.java b/src/main/java/cn/com/v2/common/interceptor/Interceptor.java index 48f657ee03722138c7f844cdf04a4fd8ed02b3ae..047828c702dbeb458728a492dc375b89040d636d 100644 --- a/src/main/java/cn/com/v2/common/interceptor/Interceptor.java +++ b/src/main/java/cn/com/v2/common/interceptor/Interceptor.java @@ -1,9 +1,8 @@ package cn.com.v2.common.interceptor; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * 拦截器 */ diff --git a/src/main/java/cn/com/v2/controller/ApiController.java b/src/main/java/cn/com/v2/controller/ApiController.java index 4f9d21603e3130397a3e6276bbcd1ad974a27067..0d40db9d8988fd6d86dcde8b292fe50cf7aea97c 100644 --- a/src/main/java/cn/com/v2/controller/ApiController.java +++ b/src/main/java/cn/com/v2/controller/ApiController.java @@ -2,7 +2,10 @@ package cn.com.v2.controller; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -20,15 +23,15 @@ import cn.com.v2.util.SaTokenUtil; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; -import io.swagger.annotations.ApiOperation; @RestController @RequestMapping("/api/goview/sys") +@Tag(name = "认证") public class ApiController extends BaseController { @Autowired private ISysUserService iSysUserService; - @ApiOperation(value = "登陆", notes = "登陆") + @Operation(summary ="登陆") @PostMapping("/login") @ResponseBody public AjaxResult APIlogin(@RequestBody SysUser user, HttpServletRequest request) { @@ -62,7 +65,7 @@ public class ApiController extends BaseController { } - @ApiOperation(value = "登陆", notes = "登陆") + @Operation(summary ="登出") @GetMapping("/logout") @ResponseBody public AjaxResult logout() { @@ -75,7 +78,7 @@ public class ApiController extends BaseController { } - @ApiOperation(value = "获取oss地址", notes = "获取oss地址") + @Operation(summary ="获取oss地址") @GetMapping("/getOssInfo") @ResponseBody public AjaxResult getOssInfo() { diff --git a/src/main/java/cn/com/v2/controller/FileController.java b/src/main/java/cn/com/v2/controller/FileController.java index 76f11e563ce3b6fd348a6784a5570f07a1fe5271..ca9c5b06821c42514327fe325190b2b4487fac90 100644 --- a/src/main/java/cn/com/v2/controller/FileController.java +++ b/src/main/java/cn/com/v2/controller/FileController.java @@ -3,20 +3,24 @@ package cn.com.v2.controller; import java.io.File; import java.io.IOException; import java.math.BigInteger; +import java.nio.file.Files; +import java.nio.file.Paths; import java.security.MessageDigest; import java.time.LocalDateTime; import java.util.Date; import java.util.Map; import java.util.Map.Entry; -import javax.servlet.http.HttpServletResponse; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import cn.com.v2.common.base.BaseController; import cn.com.v2.common.config.V2Config; @@ -37,7 +41,7 @@ import cn.hutool.core.util.StrUtil; * @author fuce * @date: 2018年9月16日 下午4:23:50 */ -@Api(value = "文件上传") +@Tag(name = "文件上传") @RestController @RequestMapping("/api/file") @Slf4j @@ -54,7 +58,7 @@ public class FileController extends BaseController{ * @param ids * @return */ - @ApiOperation(value = "删除", notes = "删除") + @Operation(description = "删除") @DeleteMapping("/remove") public AjaxResult remove(String ids){ Boolean b=iSysFileService.removeByIds(StrUtil.split(ids, ',',-1)); @@ -65,8 +69,8 @@ public class FileController extends BaseController{ } } - - @ApiOperation(value = "修改", notes = "修改") + + @Operation(description = "修改") @PutMapping("/update") public AjaxResult update(String id,@RequestBody MultipartFile object) throws IllegalStateException, IOException{ SysFile sysFile=iSysFileService.getById(id); @@ -200,7 +204,7 @@ public class FileController extends BaseController{ * @throws IOException */ @PostMapping("/getFileText302") - public void getFileText302(String key,String relativePath,HttpServletResponse response) throws IOException{ + public void getFileText302(String key, String relativePath, HttpServletResponse response) throws IOException{ String str=v2Config.getHttpurl()+key+"/"+relativePath; response.sendRedirect(str); diff --git a/src/main/java/cn/com/v2/controller/GoviewProjectController.java b/src/main/java/cn/com/v2/controller/GoviewProjectController.java index 707bf367153c4dafe1031ea742e9ec179e027ca3..717da3f4d0c9a89112177931702ac92190813d17 100644 --- a/src/main/java/cn/com/v2/controller/GoviewProjectController.java +++ b/src/main/java/cn/com/v2/controller/GoviewProjectController.java @@ -1,5 +1,6 @@ package cn.com.v2.controller; +import io.swagger.v3.oas.annotations.Operation; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -28,10 +29,8 @@ import cn.com.v2.service.IGoviewProjectService; import cn.com.v2.service.ISysFileService; import cn.com.v2.util.ConvertUtil; import cn.com.v2.util.SnowflakeIdWorker; -import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; -import io.swagger.annotations.ApiOperation; import java.io.File; import java.io.IOException; import java.time.LocalDateTime; @@ -62,7 +61,7 @@ public class GoviewProjectController extends BaseController{ private IGoviewProjectDataService iGoviewProjectDataService; - @ApiOperation(value = "分页跳转", notes = "分页跳转") + @Operation(description = "分页跳转") @GetMapping("/list") @ResponseBody public ResultTable list(Tablepar tablepar){ @@ -83,7 +82,7 @@ public class GoviewProjectController extends BaseController{ * @return */ //@Log(title = "项目表新增", action = "111") - @ApiOperation(value = "新增", notes = "新增") + @Operation(description = "新增") @PostMapping("/create") @ResponseBody public AjaxResult add(@RequestBody GoviewProject goviewProject){ @@ -104,7 +103,7 @@ public class GoviewProjectController extends BaseController{ * @return */ //@Log(title = "项目表删除", action = "111") - @ApiOperation(value = "删除", notes = "删除") + @Operation(description = "删除") @DeleteMapping("/delete") @ResponseBody public AjaxResult remove(String ids){ @@ -117,7 +116,7 @@ public class GoviewProjectController extends BaseController{ } } - @ApiOperation(value = "修改保存", notes = "修改保存") + @Operation(description = "修改保存") @PostMapping("/edit") @ResponseBody public AjaxResult editSave(@RequestBody GoviewProject goviewProject) @@ -130,7 +129,7 @@ public class GoviewProjectController extends BaseController{ } - @ApiOperation(value = "项目重命名", notes = "项目重命名") + @Operation(description = "项目重命名") @PostMapping("/rename") @ResponseBody public AjaxResult rename(@RequestBody GoviewProject goviewProject) @@ -166,7 +165,7 @@ public class GoviewProjectController extends BaseController{ } - @ApiOperation(value = "获取项目存储数据", notes = "获取项目存储数据") + @Operation(description = "获取项目存储数据") @GetMapping("/getData") @ResponseBody public AjaxResult getData(String projectId, ModelMap map) @@ -186,7 +185,7 @@ public class GoviewProjectController extends BaseController{ - @ApiOperation(value = "保存项目数据", notes = "保存项目数据") + @Operation(description = "保存项目数据") @PostMapping("/save/data") @ResponseBody public AjaxResult saveData(GoviewProjectData data) { diff --git a/src/main/java/cn/com/v2/controller/Indexcontroller.java b/src/main/java/cn/com/v2/controller/Indexcontroller.java index e00aaf8334bb2aad62540c7b98ac17246d6099fd..bf742f32621f1f155a2e0d0527f7275c88f68e3c 100644 --- a/src/main/java/cn/com/v2/controller/Indexcontroller.java +++ b/src/main/java/cn/com/v2/controller/Indexcontroller.java @@ -2,7 +2,8 @@ package cn.com.v2.controller; import java.io.IOException; import java.io.PrintWriter; -import javax.servlet.http.HttpServletResponse; + +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/src/main/java/cn/com/v2/controller/OssController.java b/src/main/java/cn/com/v2/controller/OssController.java new file mode 100644 index 0000000000000000000000000000000000000000..e9bfd6368842ef31cd35c50927ee36fc3a00c940 --- /dev/null +++ b/src/main/java/cn/com/v2/controller/OssController.java @@ -0,0 +1,50 @@ +package cn.com.v2.controller; + +import cn.com.v2.common.config.V2Config; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + + +@Tag(name = "文件下载") +@RestController +@RequestMapping +public class OssController { + + + @Autowired + private V2Config v2Config; + + /** + * 下载 + * @param response + * @throws IOException + */ + @GetMapping("/oss/**") + public void download(HttpServletRequest request, HttpServletResponse response) throws IOException { + String fileurl = v2Config.getFileurl(); + String requestUri = request.getRequestURI(); + String path = requestUri.substring(requestUri.indexOf("/oss/") + 5); + String fullPath = fileurl + File.separator + path; + File file = new File(fullPath); + + if (!file.exists()) { + // 文件不存在处理 + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + response.getWriter().write("File not found."); + return; + } + response.setContentType(Files.probeContentType(file.toPath())); + response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); + response.setContentLengthLong(file.length()); + Files.copy(file.toPath(), response.getOutputStream()); + } +} diff --git a/src/main/java/cn/com/v2/model/vo/GoviewProjectVo.java b/src/main/java/cn/com/v2/model/vo/GoviewProjectVo.java index 36917614cd678c9e45bea06f67c86f0c7e359424..8810ba51dd516bac43ead50936a5afae815ebcd1 100644 --- a/src/main/java/cn/com/v2/model/vo/GoviewProjectVo.java +++ b/src/main/java/cn/com/v2/model/vo/GoviewProjectVo.java @@ -5,34 +5,34 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import cn.hutool.core.date.DateUtil; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; public class GoviewProjectVo implements Serializable { private static final long serialVersionUID = 1L; - @ApiModelProperty(value = "主键") + @Schema(description = "主键") private String id; - @ApiModelProperty(value = "项目名称") + @Schema(description = "项目名称") private String projectName; - @ApiModelProperty(value = "项目状态[-1未发布,1发布]") + @Schema(description = "项目状态[-1未发布,1发布]") private Integer state; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") - @ApiModelProperty(value = "创建时间") + @Schema(description = "创建时间") private Date createTime; - @ApiModelProperty(value = "创建人id") + @Schema(description = "创建人id") private String createUserId; - @ApiModelProperty(value = "删除状态[1删除,-1未删除]") + @Schema(description = "删除状态[1删除,-1未删除]") private Integer isDelete; - @ApiModelProperty(value = "首页图片") + @Schema(description = "首页图片") private String indexImage; - @ApiModelProperty(value = "项目介绍") + @Schema(description = "项目介绍") private String remarks; private String content; diff --git a/src/main/java/cn/com/v2/util/MybatisPlusGenerator.java b/src/main/java/cn/com/v2/util/MybatisPlusGenerator.java index 768486c770482bf12c87a06bad2deaf57f103264..870cd7c52dfcb1f44d9a50a94f3472dbd263de64 100644 --- a/src/main/java/cn/com/v2/util/MybatisPlusGenerator.java +++ b/src/main/java/cn/com/v2/util/MybatisPlusGenerator.java @@ -16,7 +16,7 @@ public class MybatisPlusGenerator { "", "").globalConfig(builder -> { builder.author("fc") // 设置作者 // .enableSwagger() // 开启 swagger 模式 - .fileOverride() // 覆盖已生成文件 +// .ov() // 覆盖已生成文件 .disableOpenDir() //禁止打开输出目录 .outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录 }).packageConfig(builder -> { @@ -24,7 +24,7 @@ public class MybatisPlusGenerator { .moduleName("v2") // 设置父包模块名 .entity("model") // .service() // 设置自定义service路径,不设置就是默认路径 - .pathInfo(Collections.singletonMap(OutputFile.mapperXml, + .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper/")); // 设置mapperXml生成路径 }).strategyConfig(builder -> { builder.addInclude("t_goview_project_data") // 设置需要生成的表名 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 93307a7c9b7650a22a01e810bcb8a6318ebf4837..ae35988627e67fa7aa6ad04b268cdb79280d1424 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -14,3 +14,22 @@ spring: min-idle: 30 max-wait: 40 validation-query: SELECT 1 + stat-view-servlet: + enabled: true + #访问德鲁伊监控页面的地址 + url-pattern: /druid/* + #IP白名单 没有配置或者为空 则允许所有访问 + allow: + #IP黑名单 若白名单也存在 则优先使用 + deny: + #禁用重置按钮 + reset-enable: true + #登录所用的用户名与密码 + login-username: admin + login-password: 123456 + filter: + stat: + enabled: true + web-stat-filter: + enabled: true + type: com.alibaba.druid.pool.DruidDataSource diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0f9da35ef71b30d3d7b1753c97f7f7b32bc1d67f..9b7ebaa940416ab36fcc6d4a97cf176d0a033e19 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -58,7 +58,6 @@ spring : matching-strategy: ant_path_matcher #模板引擎 thymeleaf: - model: HTML5 prefix: classpath:/templates/ suffix: .html #指定编码 @@ -75,16 +74,11 @@ mybatis-plus: db-config: #主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID"; id-type: INPUT - #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断" - field-strategy: not_empty - #驼峰下划线转换 - column-underline: true #数据库大写下划线转换 #capital-mode: true #逻辑删除配置 logic-delete-value: 0 logic-not-delete-value: 1 - db-type: sqlite #刷新mapper 调试神器 refresh: true # 原生配置 @@ -99,8 +93,8 @@ sa-token: # token有效期,单位s 默认30天, -1代表永不过期 timeout: 2592000 # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 - activity-timeout: -1 - # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + active-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) is-concurrent: true # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) is-share: true