From f1968590a9bcf8cf229429e81056b2f6babbd908 Mon Sep 17 00:00:00 2001 From: merlin Date: Wed, 5 Nov 2025 09:36:08 +0800 Subject: [PATCH] feat: add dicker ignore; add search logic --- .dockerignore | 1 + Dockerfile | 6 +- .../myblog_server/config/SecurityConfig.java | 2 +- .../controller/BasicController.java | 36 ++++++++++++ .../controller/LoginController.java | 5 -- .../controller/TestController.java | 11 +--- .../myblog_server/utils/SHA256Util.java | 53 ------------------ src/main/resources/application.yml | 12 ---- src/main/resources/merlin.xin.pfx | Bin 4653 -> 0 bytes 9 files changed, 44 insertions(+), 82 deletions(-) create mode 100644 .dockerignore delete mode 100644 src/main/java/xin/merlin/myblog_server/utils/SHA256Util.java delete mode 100644 src/main/resources/merlin.xin.pfx diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ad3d4de --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +src/main/resources/application.yml diff --git a/Dockerfile b/Dockerfile index 99ef596..400d286 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,10 +15,12 @@ FROM harbor.merlin.xin/mirrors/docker.io/library/eclipse-temurin:17-jre-alpine WORKDIR /app COPY --from=builder /app/target/*.jar app.jar -RUN mkdir -p uploads/photo +RUN mkdir -p /app/uploads/photo \ + && chown -R spring:spring /app/uploads # 非 root 用户运行 RUN addgroup -S spring && adduser -S spring -G spring USER spring -ENTRYPOINT ["java","-jar","/app/app.jar"] +ENTRYPOINT ["java","-jar","/app/app.jar", "--spring.config.location=file:/app/application.yml"] + diff --git a/src/main/java/xin/merlin/myblog_server/config/SecurityConfig.java b/src/main/java/xin/merlin/myblog_server/config/SecurityConfig.java index 49d1d02..fee7f06 100644 --- a/src/main/java/xin/merlin/myblog_server/config/SecurityConfig.java +++ b/src/main/java/xin/merlin/myblog_server/config/SecurityConfig.java @@ -30,7 +30,7 @@ public class SecurityConfig { .requestMatchers( "/login", "/register", - "/test", + "/health", "/code/**", "/blog/**" ).permitAll() diff --git a/src/main/java/xin/merlin/myblog_server/controller/BasicController.java b/src/main/java/xin/merlin/myblog_server/controller/BasicController.java index a877758..0ea5422 100644 --- a/src/main/java/xin/merlin/myblog_server/controller/BasicController.java +++ b/src/main/java/xin/merlin/myblog_server/controller/BasicController.java @@ -1,6 +1,9 @@ package xin.merlin.myblog_server.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +16,8 @@ import xin.merlin.myblog_server.utils.JwtUtil; import xin.merlin.myblog_server.utils.RequestBack; import xin.merlin.myblog_server.utils.enums.ResultCode; +import java.util.List; + @RestController @RequestMapping("/blog") public class BasicController { @@ -43,8 +48,24 @@ public class BasicController { @GetMapping("/get/news") public RequestBack getNews(@RequestParam Integer current,@RequestParam Integer size) { Page page = new Page<>(current,size); + page.setOrders(List.of(OrderItem.desc("published"))); return RequestBack.success(ResultCode.SUCCESS,newsService.page(page)); } + // 搜索新闻 + @PostMapping("/search/news") + public RequestBack searchNews(@RequestParam Integer current, + @RequestParam Integer size, + @RequestBody News news) { + + Page page = new Page<>(current, size); + QueryWrapper qw = new QueryWrapper<>(); + qw.like(news.getTitle() != null, "title", news.getTitle()) + .orderByDesc("published"); + + IPage result = newsService.page(page, qw); + + return RequestBack.success(ResultCode.SUCCESS, result); + } // 获取文章 @GetMapping("/get/article/{a_id}") public RequestBack getArticle(@PathVariable Integer a_id) { @@ -62,5 +83,20 @@ public class BasicController { commentService.save(comment); return RequestBack.success(ResultCode.SUCCESS); } + // 搜索新闻 + @PostMapping("/search/articles") + public RequestBack searchArticles(@RequestParam Integer current, + @RequestParam Integer size, + @RequestBody Article article) { + + Page
page = new Page<>(current, size); + QueryWrapper
qw = new QueryWrapper<>(); + qw.like(article.getTitle() != null, "title", article.getTitle()) + .orderByDesc("published"); + + IPage
result = articleService.page(page, qw); + + return RequestBack.success(ResultCode.SUCCESS, result); + } // 联系管理员 } diff --git a/src/main/java/xin/merlin/myblog_server/controller/LoginController.java b/src/main/java/xin/merlin/myblog_server/controller/LoginController.java index d28fc7d..f21a64b 100644 --- a/src/main/java/xin/merlin/myblog_server/controller/LoginController.java +++ b/src/main/java/xin/merlin/myblog_server/controller/LoginController.java @@ -1,7 +1,5 @@ package xin.merlin.myblog_server.controller; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.github.benmanes.caffeine.cache.Cache; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; @@ -17,7 +15,6 @@ import xin.merlin.myblog_server.service.LoginService; import xin.merlin.myblog_server.service.impl.UserServiceImpl; import xin.merlin.myblog_server.utils.JwtUtil; import xin.merlin.myblog_server.utils.RequestBack; -import xin.merlin.myblog_server.utils.SHA256Util; import xin.merlin.myblog_server.utils.enums.ResultCode; import java.util.Map; @@ -31,8 +28,6 @@ public class LoginController { @Autowired private UserServiceImpl userServiceImpl; - @Autowired - private SHA256Util sha256Util; @Autowired private JwtUtil jwtUtil; diff --git a/src/main/java/xin/merlin/myblog_server/controller/TestController.java b/src/main/java/xin/merlin/myblog_server/controller/TestController.java index 8776d44..ab60345 100644 --- a/src/main/java/xin/merlin/myblog_server/controller/TestController.java +++ b/src/main/java/xin/merlin/myblog_server/controller/TestController.java @@ -1,19 +1,12 @@ package xin.merlin.myblog_server.controller; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import xin.merlin.myblog_server.utils.JwtUtil; @RestController public class TestController { - - @Autowired - private JwtUtil jwtUtil; - - @GetMapping("/test") + @GetMapping("/health") public String test() { - String token = jwtUtil.generateToken("1223",12); - return token; + return "ok"; } } diff --git a/src/main/java/xin/merlin/myblog_server/utils/SHA256Util.java b/src/main/java/xin/merlin/myblog_server/utils/SHA256Util.java deleted file mode 100644 index 2de9142..0000000 --- a/src/main/java/xin/merlin/myblog_server/utils/SHA256Util.java +++ /dev/null @@ -1,53 +0,0 @@ -package xin.merlin.myblog_server.utils; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -@Component -public class SHA256Util { - /** - * 对输入字符串进行SHA-256加密 - * @param input 输入字符串 - * @return 加密后的十六进制字符串 - */ - public String encryptSHA256(String input) { - try { - MessageDigest digest = MessageDigest.getInstance("SHA-256"); - byte[] encodedhash = digest.digest(input.getBytes()); - return bytesToHex(encodedhash); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException("SHA-256 algorithm not found", e); - } - } - - /** - * 将字节数组转换为十六进制字符串 - * @param hash 字节数组 - * @return 十六进制字符串 - */ - private String bytesToHex(byte[] hash) { - StringBuilder hexString = new StringBuilder(2 * hash.length); - for (int i = 0; i < hash.length; i++) { - String hex = Integer.toHexString(0xff & hash[i]); - if (hex.length() == 1) { - hexString.append('0'); - } - hexString.append(hex); - } - return hexString.toString(); - } - - /** - * 使用用户ID生成盐值,并对密码进行加密 - * @param password 用户输入的密码 - * @return 加密后的密码哈希值 - */ - - public String encryptPassword(String password) { - // 将盐值与密码拼接后进行SHA-256加密 - return encryptSHA256( password); - } -} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0bca0d5..a0e70b2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,11 +1,5 @@ server: port: 8080 -# port: 8443 -# ssl: -# key-store: classpath:merlin.xin.pfx -# key-store-password: 7p7vcfmu -# key-store-type: PKCS12 -# address: 0.0.0.0 jwt: secret: CkmEXxVBNBsMUo4VNhDcH0YBhA1O4zSkQgSM243YzDY= @@ -27,12 +21,6 @@ spring: jackson: time-zone: Asia/Shanghai date-format: yyyy-MM-dd HH:mm:ss -# url: jdbc:mysql://8.138.214.149:3306/blog -# username: root -# password: 3604162 -# username: root -# password: server2025_xyf_Merlin -# driver-class-name: com.mysql.cj.jdbc.Driver mail: diff --git a/src/main/resources/merlin.xin.pfx b/src/main/resources/merlin.xin.pfx deleted file mode 100644 index d298cb02342988cfcc734b62bb6d0c6305d76cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4653 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 Wt;K&gbRf+dN2Hc51w;o#75xj;>AN-n