基于springboot的小说网站

本文介绍了一个基于SpringBoot构建的小说网站,利用Shiro框架管理用户权限,未登录用户可阅读,登录后可写小说、添加到书架、评论等。验证码通过Redis存储并设置有效时间,邮件服务使用JavaMailSender发送,支持HTML样式,并使用异步处理减少用户等待。同时,网站对阅读页面进行缓存管理,更新或删除章节时会清理缓存。

总体设计:使用shiro框架管理用户权限,未登录的用户只能阅读,注册与登录,登陆后的用户可以写小说,添加小说到书架,对书架的小说进行删除,对小说以及章节发表评论,用户可以删除自己发送的评论及自己小说下的评论。管理员可以设置网站首页的推荐,删除违规的章节,并把章节的备份发送到被删除用户的邮箱。用户在注册时,验证码将使用redis保存,并设置10分钟有效期,同一邮箱24h内只能发送十次验证码。

获取验证码

用户点击获取验证码时,前端将注册的邮箱传入后端,redis的key为注册的邮箱,value为验证码,时间戳,发送的次数,以json格式存放,并设置24小时过期时间。查找redis内是否有该key,如果没有,则为用户首次获取验证码,并发送验证码,将数据存入redis中,如果有,根据时间戳判断发送的间隔是否大于30s,发送的次数是否达到10次,符合条件后更新redis中的验证码,时间戳,发送次数+1

public String getCode(String email) throws MessagingException {
        HashMap<String, String> map = new HashMap<>();
        //判断是否首次获取验证码
        if(redisTemplate.hasKey(email)){
            //非首次获取从redis中拿到信息
            String json = redisTemplate.opsForValue().get(email);
            JSONObject obj = JSON.parseObject(json);
            String time = obj.getString("time");//验证码获取时间
            String num = obj.getString("num");//第几次获取
            int number = Integer.parseInt(num);
            if (number == 10){
                return "验证码发送次数已用尽,请明天再来";
            }
            if ((System.currentTimeMillis()/1000 - Long.parseLong(time))<30){
                return "距离上次验证码发送还不到30s!";
            }
            map.put("code",CodeUtil.code());
            map.put("time", String.valueOf(System.currentTimeMillis()/ 1000));
            number++;
            map.put("num", String.valueOf(number));
            redisTemplate.opsForValue().getAndSet(email,JSON.toJSONString(map));//将新验证码写入redis
            emailUtil.sendCode(email,map.get("code"));
            
### 开发基于Spring Boot的在线小说阅读网站 要开发一个基于Spring Boot的在线小说阅读网站,可以从以下几个方面入手: #### 1. 使用Spring Initializr创建项目 通过Spring Initializr快速搭建Spring Boot项目的环境是一个高效的选择。这种方式能够自动生成所需的目录结构以及默认的主程序入口类[^1]。 ```java @SpringBootApplication public class NovelReadingApplication { public static void main(String[] args) { SpringApplication.run(NovelReadingApplication.class, args); } } ``` #### 2. 添加必要的依赖项 为了实现Web功能并支持前端页面渲染,需要引入`spring-boot-starter-web`和`thymeleaf`作为模板引擎来展示HTML页面[^2]。此外,还需要数据库的支持用于存储小说章节、用户信息等内容,因此建议加入`spring-boot-starter-data-jpa`和某种关系型数据库驱动(如MySQL)。 ```xml <dependencies> <!-- Web 功能 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Thymeleaf 模板引擎 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- 数据库访问 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- MySQL 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> ``` #### 3. 设计实体模型 定义几个核心的数据表及其对应的Java实体类,例如`NovelEntity`表示小说基本信息;`ChapterEntity`代表各章节点详情;还有可能涉及用户的注册登录,则需设计`UserEntity`等。 ```java @Entity public class NovelEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; // Getters and Setters... } @Entity public class ChapterEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String content; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="novel_id", nullable=false) private NovelEntity novel; // Getters and Setters... } ``` #### 4. 创建RESTful API接口 编写Controller层接收HTTP请求,并调用Service逻辑完成业务操作后再响应给客户端。对于简单的CRUD操作可以直接映射到URL路径上。 ```java @RestController @RequestMapping("/api/novels") public class NovelController { @Autowired private NovelService novelService; @GetMapping("/{id}") public ResponseEntity<?> getNovelById(@PathVariable(value = "id") Long novelId){ Optional<NovelEntity> optionalBook = this.novelService.findById(novelId); if(!optionalBook.isPresent()){ return new ResponseEntity<>("No record found for given id", HttpStatus.NOT_FOUND); } return new ResponseEntity<>(optionalBook.get(), HttpStatus.OK); } } ``` #### 5. 实现前后端交互 借助Thymeleaf或其他前端技术制作静态网页,在其中嵌入动态数据加载机制以便于显示由后端传递过来的小说列表或者具体内容片段[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值