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 d298cb0..0000000 Binary files a/src/main/resources/merlin.xin.pfx and /dev/null differ