diff --git a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java index 90edeae..02d439e 100644 --- a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java +++ b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java @@ -68,19 +68,18 @@ public class SaTokenConfigure implements WebMvcConfigurer { "/file/upload", "/user/logout", "/tag/list", - "/character/list", "/character/detail", - "/character/listByTag", "/user/login", "/character/listByUser", - "/user/updateInfo", "/user/detail", "/user/register", "/character/updateUserCharacterSort", - "/character/addUserCharacter", "/character/delUserCharacter", "/user/sendVerifyMail", - "/user/verifyMailCode" + "/user/verifyMailCode", + "/character/listWithNotLogin", + "/character/listByTagWithNotLogin", + "/character/detailWithNotLogin" }; } @Bean diff --git a/src/main/java/com/yolo/keyborad/controller/CharacterController.java b/src/main/java/com/yolo/keyborad/controller/CharacterController.java index c27e491..a970545 100644 --- a/src/main/java/com/yolo/keyborad/controller/CharacterController.java +++ b/src/main/java/com/yolo/keyborad/controller/CharacterController.java @@ -85,4 +85,23 @@ public class CharacterController { characterService.removeUserCharacter(id); return ResultUtils.success(true); } + + @GetMapping("/listWithNotLogin") + @Operation(summary = "未登录用户人设列表", description = "未登录用户人设列表接口按 rank 排名") + public BaseResponse> listWithNotLogin() { + return ResultUtils.success(characterService.selectListWithNotLoginRank()); + } + + @GetMapping("/detailWithNotLogin") + @Operation(summary = "未登录用户人设详情", description = "未登录用户人设详情接口") + public BaseResponse detailWithNotLogin(@RequestParam("id") Long id) { + KeyboardCharacter character = characterService.getById(id); + return ResultUtils.success(BeanUtil.copyProperties(character, KeyboardCharacterRespVO.class)); + } + + @GetMapping("/listByTagWithNotLogin") + @Operation(summary = "未登录用户按标签查询人设列表", description = "未登录用户按标签查询人设列表接口") + public BaseResponse> listByTagWithNotLogin(@RequestParam("tagId") Long tagId) { + return ResultUtils.success(characterService.selectListByTagWithNotLogin(tagId)); + } } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/filter/CachedBodyHttpServletRequest.java b/src/main/java/com/yolo/keyborad/filter/CachedBodyHttpServletRequest.java new file mode 100644 index 0000000..d3f099a --- /dev/null +++ b/src/main/java/com/yolo/keyborad/filter/CachedBodyHttpServletRequest.java @@ -0,0 +1,52 @@ +package com.yolo.keyborad.filter; + +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import org.springframework.util.StreamUtils; + +import java.io.*; +import java.nio.charset.StandardCharsets; + +public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper { + + private byte[] cachedBody; + + public CachedBodyHttpServletRequest(HttpServletRequest request) throws IOException { + super(request); + InputStream requestInputStream = request.getInputStream(); + this.cachedBody = StreamUtils.copyToByteArray(requestInputStream); + } + + @Override + public ServletInputStream getInputStream() { + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(cachedBody); + + return new ServletInputStream() { + @Override + public boolean isFinished() { + return byteArrayInputStream.available() == 0; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) {} + + @Override + public int read() { + return byteArrayInputStream.read(); + } + }; + } + + @Override + public BufferedReader getReader() { + return new BufferedReader( + new InputStreamReader(this.getInputStream(), StandardCharsets.UTF_8)); + } +} diff --git a/src/main/java/com/yolo/keyborad/filter/RequestBodyCacheFilter.java b/src/main/java/com/yolo/keyborad/filter/RequestBodyCacheFilter.java new file mode 100644 index 0000000..63539ad --- /dev/null +++ b/src/main/java/com/yolo/keyborad/filter/RequestBodyCacheFilter.java @@ -0,0 +1,32 @@ +package com.yolo.keyborad.filter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; + +@Component +public class RequestBodyCacheFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain) + throws ServletException, IOException { + + // 只缓存一次 + if (!(request instanceof CachedBodyHttpServletRequest)) { + + CachedBodyHttpServletRequest cachedRequest = new CachedBodyHttpServletRequest(request); + + filterChain.doFilter(cachedRequest, response); + return; + } + + filterChain.doFilter(request, response); + } +} diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardCharacterService.java b/src/main/java/com/yolo/keyborad/service/KeyboardCharacterService.java index dc02163..f520637 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardCharacterService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardCharacterService.java @@ -29,4 +29,8 @@ public interface KeyboardCharacterService extends IService{ void addUserCharacter(KeyboardUserCharacterAddDTO addDTO); void removeUserCharacter(Long id); + + List selectListWithNotLoginRank(); + + List selectListByTagWithNotLogin(Long tagId); } diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java index 6036909..e6b5fd0 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java @@ -148,4 +148,21 @@ public class KeyboardCharacterServiceImpl extends ServiceImpl selectListWithNotLoginRank() { + List keyboardCharacters = keyboardCharacterMapper.selectList(new LambdaQueryWrapper() + .eq(KeyboardCharacter::getDeleted, false) + .orderByAsc(KeyboardCharacter::getRank)); + return BeanUtil.copyToList(keyboardCharacters, KeyboardCharacterRespVO.class); + } + + @Override + public List selectListByTagWithNotLogin(Long tagId) { + List keyboardCharacters = keyboardCharacterMapper.selectList(new LambdaQueryWrapper() + .eq(KeyboardCharacter::getDeleted, false) + .eq(KeyboardCharacter::getTag, tagId) + .orderByDesc(KeyboardCharacter::getRank)); + return BeanUtil.copyToList(keyboardCharacters, KeyboardCharacterRespVO.class); + } }