开源博客项目OneBlog解读

前言

本篇文章主要通过解读开源项目OneBlog的如何搭建、技术栈的介绍及优点与不足,来加深对技术理解,后期为自己搭建个人博客项目积累经验。

简介

OneBlog 一个简洁美观、功能强大并且自适应的Java博客。使用springboot开发,前端使用Bootstrap。支持移动端自适应,配有完备的前台和后台管理功能。

前端页面.png
后台页面.png

技术栈

  • Springboot 2.0.8
  • Apache Shiro 1.2.2
  • Logback
  • Redis
  • Lombok
  • Websocket
  • MySQL、Mybatis、Mapper、Pagehelper
  • Freemarker
  • Bootstrap 3.3.0
  • wangEditor
  • jQuery 1.11.1、jQuery Lazyload 1.9.7、fancybox、iCheck
  • 阿里云OSS
  • kaptcha
  • Qiniu
  • webMagic
  • ...

功能简介

  • 多种编辑器:支持wangEditor和Markdown两种富文本编辑器,可以自行选择
  • 自动申请友情链接:在线申请友情链接,无需站长手动配置,只需申请方添加完站长的连接后自行申请即可
  • 百度推送:支持百度推送功能,加速百度搜索引擎收录博文
  • 评论系统:自研的评论系统,支持显示用户地址、浏览器和os信息,后台可审核评论、开启匿名评论、回复和邮件通知评论
  • 权限管理:后台配备完善的权限管理
  • SEO:自带robots、sitemap等seo模板,实现自动生成robots和sitemap
  • 实时通讯:管理员可向在线的用户发送实时消息(需用户授权 - 基于websocket实现,具体参考DBlog建站之Websocket的使用
  • 系统配置支持快速配置:可通过后台手动修改诸如域名信息、SEO优化、赞赏码、七牛云以及更新维护通知等
  • 多种文件存储:集成七牛云、阿里云OSS,实现文件云存储,同时支持本地文件存储
  • 文件搬运工:集成blog-hunter实现“文章搬运工”功能,支持一键同步imooc、csdn、iteye或者cnblogs上的文章,可抓取列表和单个文章
  • 第三方授权登录:集成JustAuth实现第三方授权登录

使用方法

1.使用IDE导入本项目
2.新建数据库 CREATE DATABASE dblog;
3.导入数据库docs/db/dblog.sql
4.初始化数据库docs/db/init_data.sql
5.修改配置文件
(1)数据库链接属性(在[blog-core]/resources/config/application-center-{env}.yml配置文件中搜索datasource或定位到L.5)
(2)redis配置(在[blog-core]/resources/config/application-center-{env}.yml配置文件中搜索redis或定位到L.14)
以上两个必备的配置项修改完成后就能启动项目了。关于其他配置项,请参考后台“系统配置”页面
6.运行项目(三种方式,任选其一)
(1)项目根目录下执行mvn -X clean package -Dmaven.test.skip=true -Ptest编译打包(注:-Ptest中的test为环境标识),然后cd到blog-web目录下执行java -jar target/blog-web.jar
(2)在blog-web项目根目录下执行mvn spring-boot:run(注,如果报依赖错误,可在相关的依赖模块先执行install操作)
(3)直接运行BlogWebApplication.java
7.浏览器访问http://127.0.0.1:8443
8.blog-admin项目的启动方式与blog-web类似,请参考上面的使用说明

项目结构

模块 释义 备注
blog-core 核心业务类模块,提供基本的数据操作、工具处理等 该模块只是作为核心依赖包存在
blog-admin 后台管理模块 该模块作为单独项目打包部署
blog-web 前台模块 该模块作为单独项目打包部署
blog-file 文件存储功能模块 支持local、七牛云和阿里云OSS
blog-spider 爬虫相关代码模块 已使用blog-hunter插件替代

项目功能

模块分析

好了,有了以上说明后,相信大家很容易就能把项目运行起来,接下来,我们就分功能模块去分析。

\color{red}{ 1.日志记录、Redis缓存自定义注解}

在项目中,有些比较重要的用户操作我们需要记录下来,特别是涉及到后台的管理员操作记录。
记录内容一般包括下面---

  • 操作用户
  • 操作ip
  • 操作内容
  • 操作连接,方法参数

对于不涉及主要业务的边缘服务,我们可以通过AOP来完成,项目中自定义了一个注解 bussinessLog

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface BussinessLog {
  /**
   * 业务的名称
   */
  String value() default "";

  /**
   * 平台,默认为后台管理
   */
  PlatformEnum platform() default PlatformEnum.ADMIN;

  /**
   * 是否将当前日志记录到数据库中
   */
  boolean save() default true;

}

\color{red}{2.文章浏览记录}

一般来说,每篇文章都会有阅读数量,很多人做的都是每点击一次就数量加一,这个明显有刷阅读的bug。一般来说,我们可以通过ip,用户id来限定单个用户是否重复阅读。

在这个博客项目中,作者也是使用了切面编程,已文章详情页方法作为切入点,记录阅读的ip,不过可惜的是用户并没有做任何防止刷阅读的校验,我们具体来看下代码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。