diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/RandomValidateCodeUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/RandomValidateCodeUtil.java index 0a4ffb1..73eeaee 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/RandomValidateCodeUtil.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/utils/RandomValidateCodeUtil.java @@ -1,13 +1,13 @@ package com.java2nb.novel.core.utils; -import com.java2nb.novel.core.cache.CacheService; +import lombok.SneakyThrows; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; +import java.io.OutputStream; import java.util.Random; /** @@ -18,27 +18,27 @@ public class RandomValidateCodeUtil { /** * 放到session中的key - * */ + */ public static final String RANDOM_CODE_KEY = "randomValidateCodeKey"; /** * 随机产生只有数字的字符串 private String - * */ + */ private String randString = "0123456789"; /** * 图片宽 - * */ + */ private int width = 100; /** * 图片高 - * */ + */ private int height = 38; /** * 干扰线数量 - * */ + */ private int lineSize = 40; /** * 随机产生字符数量 - * */ + */ private int stringNum = 4; private static final Logger logger = LoggerFactory.getLogger(RandomValidateCodeUtil.class); @@ -69,9 +69,10 @@ public class RandomValidateCodeUtil { } /** - * 生成随机图片 + * 生成随机码图片 */ - public void getRandcode(CacheService cacheService, HttpServletResponse response) { + @SneakyThrows + public String genRandCodeImage(OutputStream out) { // BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR); // 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作 @@ -80,7 +81,7 @@ public class RandomValidateCodeUtil { g.fillRect(0, 0, width, height); //字体大小 //字体颜色 - g.setColor(new Color(204,204,204)); + g.setColor(new Color(204, 204, 204)); // 绘制干扰线 for (int i = 0; i <= lineSize; i++) { drowLine(g); @@ -90,17 +91,10 @@ public class RandomValidateCodeUtil { for (int i = 1; i <= stringNum; i++) { randomString = drowString(g, randomString, i); } - logger.info(randomString); - //将生成的随机字符串保存到缓存中 - cacheService.set(RANDOM_CODE_KEY,randomString,60*5); g.dispose(); - try { - // 将内存中的图片通过流动形式输出到客户端 - ImageIO.write(image, "JPEG", response.getOutputStream()); - } catch (Exception e) { - logger.error("将内存中的图片通过流动形式输出到客户端失败>>>> ", e); - } - + // 将内存中的图片通过流动形式输出到客户端 + ImageIO.write(image, "JPEG", out); + return randomString; } /** @@ -109,9 +103,9 @@ public class RandomValidateCodeUtil { private String drowString(Graphics g, String randomString, int i) { g.setFont(getFont()); g.setColor(new Color(random.nextInt(101), random.nextInt(111), random - .nextInt(121))); + .nextInt(121))); String rand = String.valueOf(getRandomString(random.nextInt(randString - .length()))); + .length()))); randomString += rand; g.translate(random.nextInt(3), random.nextInt(3)); g.drawString(rand, 13 * i, 23); diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java b/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java index 1cf83fa..e696599 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java @@ -5,6 +5,7 @@ import com.java2nb.novel.core.cache.CacheService; import com.java2nb.novel.core.enums.ResponseStatus; import com.java2nb.novel.core.utils.Constants; import com.java2nb.novel.core.utils.FileUtil; +import com.java2nb.novel.core.utils.IpUtil; import com.java2nb.novel.core.utils.RandomValidateCodeUtil; import io.github.xxyopen.model.resp.RestResult; import io.github.xxyopen.util.UUIDUtil; @@ -41,24 +42,25 @@ public class FileController { * 生成验证码 */ @GetMapping(value = "getVerify") + @SneakyThrows public void getVerify(HttpServletRequest request, HttpServletResponse response) { - try { - //设置相应类型,告诉浏览器输出的内容为图片 - response.setContentType("image/jpeg"); - //设置响应头信息,告诉浏览器不要缓存此内容 - response.setHeader("Pragma", "No-cache"); - response.setHeader("Cache-Control", "no-cache"); - response.setDateHeader("Expire", 0); - RandomValidateCodeUtil randomValidateCode = new RandomValidateCodeUtil(); - //输出验证码图片方法 - randomValidateCode.getRandcode(cacheService, response); - } catch (Exception e) { - log.error("获取验证码失败>>>> ", e); - } + //设置相应类型,告诉浏览器输出的内容为图片 + response.setContentType("image/jpeg"); + //设置响应头信息,告诉浏览器不要缓存此内容 + response.setHeader("Pragma", "No-cache"); + response.setHeader("Cache-Control", "no-cache"); + response.setDateHeader("Expire", 0); + RandomValidateCodeUtil randomValidateCode = new RandomValidateCodeUtil(); + //输出验证码图片方法 + String randomString = randomValidateCode.genRandCodeImage(response.getOutputStream()); + //将生成的随机字符串保存到缓存中 + cacheService.set(RandomValidateCodeUtil.RANDOM_CODE_KEY + ":" + IpUtil.getRealIp(request), randomString, + 60 * 5); } /** * 图片上传 + * * @return */ @SneakyThrows @@ -67,25 +69,26 @@ public class FileController { RestResult upload(@RequestParam("file") MultipartFile file) { Date currentDate = new Date(); String savePath = - Constants.LOCAL_PIC_PREFIX + DateUtils.formatDate(currentDate, "yyyy") + "/" + - DateUtils.formatDate(currentDate, "MM") + "/" + - DateUtils.formatDate(currentDate, "dd"); + Constants.LOCAL_PIC_PREFIX + DateUtils.formatDate(currentDate, "yyyy") + "/" + + DateUtils.formatDate(currentDate, "MM") + "/" + + DateUtils.formatDate(currentDate, "dd"); String oriName = file.getOriginalFilename(); assert oriName != null; String saveFileName = UUIDUtil.getUUID32() + oriName.substring(oriName.lastIndexOf(".")); File saveFile = new File(picSavePath + savePath, saveFileName); if (!saveFile.getParentFile().exists()) { boolean isSuccess = saveFile.getParentFile().mkdirs(); - if(!isSuccess){ + if (!isSuccess) { throw new BusinessException(ResponseStatus.FILE_DIR_MAKE_FAIL); } } file.transferTo(saveFile); - if(!FileUtil.isImage(saveFile)){ + if (!FileUtil.isImage(saveFile)) { //上传的文件不是图片 saveFile.delete(); throw new BusinessException(ResponseStatus.FILE_NOT_IMAGE); - }; + } + ; return RestResult.ok(savePath + "/" + saveFileName); } diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java b/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java index 0213f32..5357d9f 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java @@ -4,6 +4,7 @@ package com.java2nb.novel.controller; import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.cache.CacheService; import com.java2nb.novel.core.enums.ResponseStatus; +import com.java2nb.novel.core.utils.IpUtil; import com.java2nb.novel.core.utils.RandomValidateCodeUtil; import com.java2nb.novel.entity.User; import com.java2nb.novel.entity.UserBuyRecord; @@ -59,11 +60,12 @@ public class UserController extends BaseController { * 注册 */ @PostMapping("register") - public RestResult register(@Validated({AddGroup.class}) User user, @RequestParam(value = "velCode", defaultValue = "") String velCode) { - + public RestResult register(@Validated({AddGroup.class}) User user, + @RequestParam(value = "velCode", defaultValue = "") String velCode, HttpServletRequest request) { //判断验证码是否正确 - if (!velCode.equals(cacheService.get(RandomValidateCodeUtil.RANDOM_CODE_KEY))) { + if (!velCode.equals( + cacheService.get(RandomValidateCodeUtil.RANDOM_CODE_KEY + ":" + IpUtil.getRealIp(request)))) { return RestResult.fail(ResponseStatus.VEL_CODE_ERROR); } @@ -113,95 +115,98 @@ public class UserController extends BaseController { /** * 加入书架 - * */ + */ @PostMapping("addToBookShelf") - public RestResult addToBookShelf(Long bookId,Long preContentId, HttpServletRequest request) { + public RestResult addToBookShelf(Long bookId, Long preContentId, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - userService.addToBookShelf(userDetails.getId(),bookId,preContentId); + userService.addToBookShelf(userDetails.getId(), bookId, preContentId); return RestResult.ok(); } /** * 移出书架 - * */ + */ @DeleteMapping("removeFromBookShelf/{bookId}") public RestResult removeFromBookShelf(@PathVariable("bookId") Long bookId, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - userService.removeFromBookShelf(userDetails.getId(),bookId); + userService.removeFromBookShelf(userDetails.getId(), bookId); return RestResult.ok(); } /** * 分页查询书架 - * */ + */ @GetMapping("listBookShelfByPage") - public RestResult listBookShelfByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize,HttpServletRequest request) { + public RestResult listBookShelfByPage(@RequestParam(value = "curr", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "10") int pageSize, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - return RestResult.ok(userService.listBookShelfByPage(userDetails.getId(),page,pageSize)); + return RestResult.ok(userService.listBookShelfByPage(userDetails.getId(), page, pageSize)); } /** * 分页查询阅读记录 - * */ + */ @GetMapping("listReadHistoryByPage") - public RestResult listReadHistoryByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize,HttpServletRequest request) { + public RestResult listReadHistoryByPage(@RequestParam(value = "curr", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "10") int pageSize, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - return RestResult.ok(userService.listReadHistoryByPage(userDetails.getId(),page,pageSize)); + return RestResult.ok(userService.listReadHistoryByPage(userDetails.getId(), page, pageSize)); } /** * 添加阅读记录 - * */ + */ @PostMapping("addReadHistory") - public RestResult addReadHistory(Long bookId,Long preContentId, HttpServletRequest request) { + public RestResult addReadHistory(Long bookId, Long preContentId, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - userService.addReadHistory(userDetails.getId(),bookId,preContentId); + userService.addReadHistory(userDetails.getId(), bookId, preContentId); return RestResult.ok(); } /** * 添加反馈 - * */ + */ @PostMapping("addFeedBack") public RestResult addFeedBack(String content, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - userService.addFeedBack(userDetails.getId(),content); + userService.addFeedBack(userDetails.getId(), content); return RestResult.ok(); } /** * 分页查询我的反馈列表 - * */ + */ @GetMapping("listUserFeedBackByPage") - public RestResult listUserFeedBackByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize, HttpServletRequest request){ + public RestResult listUserFeedBackByPage(@RequestParam(value = "curr", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "5") int pageSize, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - return RestResult.ok(userService.listUserFeedBackByPage(userDetails.getId(),page,pageSize)); + return RestResult.ok(userService.listUserFeedBackByPage(userDetails.getId(), page, pageSize)); } /** * 查询个人信息 - * */ + */ @GetMapping("userInfo") public RestResult userInfo(HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); @@ -213,15 +218,15 @@ public class UserController extends BaseController { /** * 更新个人信息 - * */ + */ @PostMapping("updateUserInfo") public RestResult updateUserInfo(@Validated({UpdateGroup.class}) User user, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - userService.updateUserInfo(userDetails.getId(),user); - if(user.getNickName() != null){ + userService.updateUserInfo(userDetails.getId(), user); + if (user.getNickName() != null) { userDetails.setNickName(user.getNickName()); Map data = new HashMap<>(1); data.put("token", jwtTokenUtil.generateToken(userDetails)); @@ -233,36 +238,38 @@ public class UserController extends BaseController { /** * 更新密码 - * */ + */ @PostMapping("updatePassword") - public RestResult updatePassword(String oldPassword,String newPassword1,String newPassword2,HttpServletRequest request) { + public RestResult updatePassword(String oldPassword, String newPassword1, String newPassword2, + HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - if(!(StringUtils.isNotBlank(newPassword1) && newPassword1.equals(newPassword2))){ + if (!(StringUtils.isNotBlank(newPassword1) && newPassword1.equals(newPassword2))) { RestResult.fail(ResponseStatus.TWO_PASSWORD_DIFF); } - userService.updatePassword(userDetails.getId(),oldPassword,newPassword1); + userService.updatePassword(userDetails.getId(), oldPassword, newPassword1); return RestResult.ok(); } /** * 分页查询用户书评 - * */ + */ @GetMapping("listCommentByPage") - public RestResult listCommentByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize,HttpServletRequest request) { + public RestResult listCommentByPage(@RequestParam(value = "curr", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "5") int pageSize, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return RestResult.fail(ResponseStatus.NO_LOGIN); } - return RestResult.ok(bookService.listCommentByPage(userDetails.getId(),null,page,pageSize)); + return RestResult.ok(bookService.listCommentByPage(userDetails.getId(), null, page, pageSize)); } /** * 购买小说章节 - * */ + */ @PostMapping("buyBookIndex") public RestResult buyBookIndex(UserBuyRecord buyRecord, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); @@ -270,12 +277,9 @@ public class UserController extends BaseController { return RestResult.fail(ResponseStatus.NO_LOGIN); } buyRecord.setBuyAmount(bookService.queryBookIndex(buyRecord.getBookIndexId()).getBookPrice()); - userService.buyBookIndex(userDetails.getId(),buyRecord); + userService.buyBookIndex(userDetails.getId(), buyRecord); return RestResult.ok(); } - - - }