实现了基于 Spring 的前后端分离版本的在线论坛系统,实现了用户登录注册、站内私信,帖⼦列表, 发布帖⼦, 回复帖⼦,点赞帖子,搜索帖子等功能。
项目体验:线上论坛 - 用户登录
经过简单分析:“版块类别” 和 “版块帖⼦数量” 都可以归结到 “版块” 类,做为 “版块” 类的属性;“帖⼦标题” 和 “帖⼦正⽂” 都可以归结到 “帖⼦” 类,做为 “帖⼦” 类的属性;“权限” 可以归结到 “⽤⼾”类,做为“⽤⼾”类的属性。⾄此,针对发布帖⼦这个⽤例,就确定了三个
类,分别是:⽤⼾、版块、帖⼦。
再者就是帖子回复在帖子详情里,站内私信在主页,因此还有帖子回复表和站内私信表。
- application.yml配置
- spring:
- application:
- name: 线上论坛 # 项目名
- output:
- ansi:
- enabled: ALWAYS # 控制台输出彩色日志
- profiles:
- active: dev
- mvc:
- pathmatch:
- matching-strategy: ANT_PATH_MATCHER #Springfox-Swagger兼容性配置
- favicon:
- enable: false
- datasource:
- url: jdbc:mysql://127.0.0.1:3306/forum_db?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
- username: root
- password: 123456
- driver-class-name: com.mysql.cj.jdbc.Driver
-
- # JSON序列化配置
- jackson:
- # date-format: yyyy-MM-dd HH:mm:ss # 日期格式
- date-format: yyyy-MM-dd HH:mm:ss
- time-zone: GMT+8
- default-property-inclusion: NON_NULL # 不为null时序列化
-
-
- # 设置 Mybatis 的 xml 保存路径
- mybatis:
- mapper-locations: classpath:mapper/**/*.xml # 指定 xxxMapper.xml的扫描路径
- # mapper-locations: classpath:/resources/mapper/*Mapper.xml
- type-aliases-package: com.example.forum.dao
- configuration: # 配置打印 MyBatis 执行的 SQL
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- map-underscore-to-camel-case: true #自动驼峰转换
-
- # 配置打印 MyBatis 执行的 SQL
- # 日志配置
- logging:
- pattern:
- dateformat: yyyy-MM-dd HH:mm:ss # 日期格式
- level:
- root: info # 默认日志级别
- com.bitejiuyeke.forum: debug # 指定包的日志级别
- file:
- path: ./logs # 日志保存目录
-
- server:
- port: 58080
-
- # 项目自定义相关配置
- forum:
- login: # 关于登录的配置项
- url: sign-in.html # 未登录状况下强制跳转页面
- index: # 关于首页的配置项
- board-num: 10 # 首页要显示的版块数量
创建⼯程结构

- public enum ResultCode {
- /** 定义状态码 */
- SUCCESS (0, "操作成功"),
- FAILED (1000, "操作失败"),
- FAILED_UNAUTHORIZED (1001, "未授权"),
- FAILED_PARAMS_VALIDATE (1002, "参数校验失败"),
- FAILED_FORBIDDEN (1003, "禁止访问"),
- FAILED_CREATE (1004, "新增失败"),
- FAILED_NOT_EXISTS (1005, "资源不存在"),
- FAILED_USER_EXISTS (1101, "用户已存在"),
- FAILED_USER_NOT_EXISTS (1102, "用户不存在"),
- FAILED_LOGIN (1103, "用户名或密码错误"),
- FAILED_USER_BANNED (1104, "您已被禁言, 请联系管理员, 并重新登录."),
- FAILED_TWO_PWD_NOT_SAME (1105, "两次输入的密码不一致"),
- // 版块相关的定义
- FAILED_BOARD_EXISTS (1201, "版块已存在"),
- FAILED_BOARD_NOT_EXISTS (1202, "版块不存在"),
- ERROR_SERVICES (2000, "服务器内部错误"),
- ERROR_IS_NULL (2001, "IS NULL.");
-
-
-
- long code;
- String message;
-
- public long getCode() {
- return code;
- }
-
- public String getMessage() {
- return message;
- }
-
-
- ResultCode(long code, String message) {
- this.code = code;
- this.message = message;
- }
-
- @Override
- public String toString() {
- return "code = " + code + ", message = " + message + ".";
- }
- }
使用Mybatis-Generator生成
实体类
映射⽂件xxxMapper.xml
Dao类,xxxMapper.java
项⽬中使⽤commons-codec,它是Apache提供的⽤于摘要运算、编码解码的⼯具包。常⻅的编码 解码⼯具Base64、MD5、Hex、SHA1、DES等。
-
commons-codec -
commons-codec
盐生成:
- public class UUIDUtils {
-
- /**
- * 生成一个标准的36字符的UUID
- * @return
- */
- public static String UUID_36 () {
- return UUID.randomUUID().toString();
- }
-
- /**
- * 生成一个32字符的UUID
- * @return
- */
- public static String UUID_32 () {
- return UUID.randomUUID().toString().replace("-", "");
- }
-
- }
MD5加密:
- public class MD5Utils {
- /**
- * 普通MD5加密
- * @param str 原始字符串
- * @return 一次MD5加密后的密文
- */
- public static String md5 (String str) {
- return DigestUtils.md5Hex(str);
- }
-
- /**
- * 原始字符串与Key组合进行一次MD5加密
- * @param str 原始字符串
- * @param key
- * @return 组合字符串一次MD5加密后的密文
- */
- public static String md5 (String str, String key) {
- return DigestUtils.md5Hex(str + key);
- }
-
- /**
- * 原始字符串加密后与扰动字符串组合再进行一次MD5加密
- * @param str 原始字符串
- * @param salt 扰动字符串
- * @return 加密后的密文
- */
- public static String md5Salt (String str, String salt) {
- return DigestUtils.md5Hex(DigestUtils.md5Hex(str) + salt);
- }
-
- /**
- * 校验原文与盐加密后是否与传入的密文相同
- * @param original 原字符串
- * @param salt 扰动字符串
- * @param ciphertext 密文
- * @return true 相同, false 不同
- */
- public static boolean verifyOriginalAndCiphertext (String original, String salt, String ciphertext) {
- String md5text = md5Salt(original, salt);
- if (md5text.equalsIgnoreCase(ciphertext)) {
- return true;
- }
- return false;
- }
- }
API常⽤注解 :