From af89351f13b1df4f916b47b2b8cc08de5be94244 Mon Sep 17 00:00:00 2001 From: saysky <847064370@qq.com> Date: Sat, 10 Oct 2020 16:21:26 +0800 Subject: [PATCH 01/26] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/liuyanzhao/ssm/blog/BaseTest.java | 15 ++++++ .../ssm/blog/mapper/UserMapperTest.java | 53 +++++++++++++++++++ .../ssm/blog/service/ArticleServiceTest.java | 34 ++++++++++++ .../ssm/blog/service/UserServiceTest.java | 32 +++++++++++ 4 files changed, 134 insertions(+) create mode 100644 ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/BaseTest.java create mode 100644 ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/mapper/UserMapperTest.java create mode 100644 ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/service/ArticleServiceTest.java create mode 100644 ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/service/UserServiceTest.java diff --git a/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/BaseTest.java b/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/BaseTest.java new file mode 100644 index 00000000..5f9e6fc0 --- /dev/null +++ b/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/BaseTest.java @@ -0,0 +1,15 @@ +package com.liuyanzhao.ssm.blog; + +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * 响应一个朋友号召,给其讲解项目,加单元测试 + * @author 言曌 + * @date 2020/10/10 2:32 下午 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration({"classpath:spring/spring-mybatis.xml", "classpath:spring/spring-mvc.xml", "classpath:mybatis/mybatis-config.xml"}) +public class BaseTest { +} diff --git a/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/mapper/UserMapperTest.java b/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/mapper/UserMapperTest.java new file mode 100644 index 00000000..c0710872 --- /dev/null +++ b/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/mapper/UserMapperTest.java @@ -0,0 +1,53 @@ +package com.liuyanzhao.ssm.blog.mapper; + +import com.liuyanzhao.ssm.blog.BaseTest; +import com.liuyanzhao.ssm.blog.entity.User; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.Assert; + +import java.util.Date; +import java.util.List; + +/** + * @author 言曌 + * @date 2020/10/10 2:13 下午 + */ + +public class UserMapperTest extends BaseTest { + + @Autowired + private UserMapper userMapper; + + @Test + public void listUser() { + List userList = userMapper.listUser(); + System.out.println(userList); + Assert.notEmpty(userList, "用户数量为空"); + } + + + @Test + public void insert() { + User user = new User(); + user.setUserId(1234); + user.setUserName("test123"); + user.setUserNickname("测试用户"); + user.setArticleCount(0); + user.setUserEmail("test123@gmail.com"); + user.setUserPass("123456"); + user.setUserRegisterTime(new Date()); + user.setUserUrl("https://www.baidu.com"); + user.setUserStatus(1); + int row = userMapper.insert(user); + Assert.isTrue(row == 1, "创建用户失败"); + } + + + @Test + public void deleteById() { + int row = userMapper.deleteById(1234); + Assert.isTrue(row == 1, "删除用户失败"); + } + +} diff --git a/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/service/ArticleServiceTest.java b/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/service/ArticleServiceTest.java new file mode 100644 index 00000000..60dd2abf --- /dev/null +++ b/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/service/ArticleServiceTest.java @@ -0,0 +1,34 @@ +package com.liuyanzhao.ssm.blog.service; + +import com.liuyanzhao.ssm.blog.BaseTest; +import com.liuyanzhao.ssm.blog.entity.Article; +import com.liuyanzhao.ssm.blog.enums.ArticleStatus; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.Assert; + +import java.util.List; + +/** + * @author 言曌 + * @date 2020/10/10 2:36 下午 + */ + +public class ArticleServiceTest extends BaseTest { + + @Autowired + private ArticleService articleService; + + @Test + public void countArticle() { + int count = articleService.countArticle(ArticleStatus.PUBLISH.getValue()); + System.out.println(count); + Assert.state(count > 0, "已发布文章数量为0"); + } + + @Test + public void listRecentArticle() { + List
articleList = articleService.listRecentArticle(5); + Assert.notEmpty(articleList, "文章数量为0"); + } +} diff --git a/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/service/UserServiceTest.java b/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/service/UserServiceTest.java new file mode 100644 index 00000000..f46ce3fe --- /dev/null +++ b/ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/service/UserServiceTest.java @@ -0,0 +1,32 @@ +package com.liuyanzhao.ssm.blog.service; + +import com.liuyanzhao.ssm.blog.BaseTest; +import com.liuyanzhao.ssm.blog.entity.User; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.Assert; + +/** + * @author 言曌 + * @date 2020/10/10 2:32 下午 + */ + +public class UserServiceTest extends BaseTest { + + @Autowired + private UserService userService; + + @Test + public void getUserById() { + User user = userService.getUserById(1); + System.out.println(user); + Assert.notNull(user, "用户不存在"); + } + + @Test + public void getUserByName() { + User user = userService.getUserByName("admin"); + System.out.println(user); + Assert.notNull(user, "用户名不存在"); + } +} From c59d3e7b32a054cd7e1777ea7d3a78a1d68b32b2 Mon Sep 17 00:00:00 2001 From: saysky <847064370@qq.com> Date: Sat, 10 Oct 2020 16:22:38 +0800 Subject: [PATCH 02/26] =?UTF-8?q?=E5=8E=BB=E6=8E=89required=20=3D=20false?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssm/blog/service/impl/ArticleServiceImpl.java | 8 +++++--- .../ssm/blog/service/impl/CategoryServiceImpl.java | 4 ++-- .../ssm/blog/service/impl/CommentServiceImpl.java | 4 ++-- .../liuyanzhao/ssm/blog/service/impl/LinkServiceImpl.java | 2 +- .../liuyanzhao/ssm/blog/service/impl/MenuServiceImpl.java | 2 +- .../ssm/blog/service/impl/NoticeServiceImpl.java | 2 +- .../ssm/blog/service/impl/OptionsServiceImpl.java | 2 +- .../liuyanzhao/ssm/blog/service/impl/PageServiceImpl.java | 2 +- .../liuyanzhao/ssm/blog/service/impl/TagServiceImpl.java | 4 ++-- .../liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java | 4 ++-- 10 files changed, 18 insertions(+), 16 deletions(-) diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/ArticleServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/ArticleServiceImpl.java index 5899dfc6..ca3afe1d 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/ArticleServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/ArticleServiceImpl.java @@ -28,13 +28,13 @@ @Slf4j public class ArticleServiceImpl implements ArticleService { - @Autowired(required = false) + @Autowired private ArticleMapper articleMapper; - @Autowired(required = false) + @Autowired private ArticleCategoryRefMapper articleCategoryRefMapper; - @Autowired(required = false) + @Autowired private ArticleTagRefMapper articleTagRefMapper; @Override @@ -142,6 +142,8 @@ public void deleteArticleBatch(List ids) { @Override public void deleteArticle(Integer id) { articleMapper.deleteById(id); + // 删除分类关联 + articleCategoryRefMapper.deleteByArticleId(id); } diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CategoryServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CategoryServiceImpl.java index 2efb300a..6cd6cd70 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CategoryServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CategoryServiceImpl.java @@ -23,10 +23,10 @@ @Slf4j public class CategoryServiceImpl implements CategoryService { - @Autowired(required = false) + @Autowired private CategoryMapper categoryMapper; - @Autowired(required = false) + @Autowired private ArticleCategoryRefMapper articleCategoryRefMapper; @Override diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CommentServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CommentServiceImpl.java index 89a66b2b..e2fb3bb4 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CommentServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CommentServiceImpl.java @@ -23,10 +23,10 @@ @Slf4j public class CommentServiceImpl implements CommentService { - @Autowired(required = false) + @Autowired private CommentMapper commentMapper; - @Autowired(required = false) + @Autowired private ArticleMapper articleMapper; @Override diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/LinkServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/LinkServiceImpl.java index e26f8f4d..ef0ad3eb 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/LinkServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/LinkServiceImpl.java @@ -17,7 +17,7 @@ @Service public class LinkServiceImpl implements LinkService { - @Autowired(required = false) + @Autowired private LinkMapper linkMapper; @Override diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/MenuServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/MenuServiceImpl.java index 9ccf80e9..baf2cbdf 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/MenuServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/MenuServiceImpl.java @@ -16,7 +16,7 @@ public class MenuServiceImpl implements MenuService { - @Autowired(required = false) + @Autowired private MenuMapper menuMapper; @Override diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/NoticeServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/NoticeServiceImpl.java index d7155a6f..f460fcb0 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/NoticeServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/NoticeServiceImpl.java @@ -15,7 +15,7 @@ @Service public class NoticeServiceImpl implements NoticeService { - @Autowired(required = false) + @Autowired private NoticeMapper noticeMapper; @Override diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/OptionsServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/OptionsServiceImpl.java index 9bda54e9..de8892f1 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/OptionsServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/OptionsServiceImpl.java @@ -17,7 +17,7 @@ public class OptionsServiceImpl implements OptionsService { - @Autowired(required = false) + @Autowired private OptionsMapper optionsMapper; @Override diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/PageServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/PageServiceImpl.java index 41dbb1a1..2d2b8827 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/PageServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/PageServiceImpl.java @@ -16,7 +16,7 @@ @Service public class PageServiceImpl implements PageService { - @Autowired(required = false) + @Autowired private PageMapper pageMapper; @Override diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/TagServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/TagServiceImpl.java index eb6f38a9..6cc1bd6c 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/TagServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/TagServiceImpl.java @@ -20,10 +20,10 @@ @Slf4j public class TagServiceImpl implements TagService { - @Autowired(required = false) + @Autowired private TagMapper tagMapper; - @Autowired(required = false) + @Autowired private ArticleTagRefMapper articleTagRefMapper; @Override diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java index 1513ac30..5fdb994e 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java @@ -19,10 +19,10 @@ @Service public class UserServiceImpl implements UserService { - @Autowired(required = false) + @Autowired private UserMapper userMapper; - @Autowired(required = false) + @Autowired private ArticleMapper articleMapper; @Override From 424af23a57a3ae077b90056d68a25b2ddef0232c Mon Sep 17 00:00:00 2001 From: saysky <847064370@qq.com> Date: Sat, 10 Oct 2020 16:28:55 +0800 Subject: [PATCH 03/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=E5=92=8C=E9=83=A8=E5=88=86=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ForestBlog/pom.xml | 45 ++++++++++--------- ForestBlog/src/main/resources/db.properties | 1 + .../main/resources/spring/spring-mybatis.xml | 2 +- .../WEB-INF/view/Admin/Public/framework.jsp | 9 ---- 4 files changed, 26 insertions(+), 31 deletions(-) diff --git a/ForestBlog/pom.xml b/ForestBlog/pom.xml index 19337842..6cf869cc 100755 --- a/ForestBlog/pom.xml +++ b/ForestBlog/pom.xml @@ -7,6 +7,16 @@ 1.0.0-SNAPSHOT ForestBlog Maven Webapp http://maven.apache.org + + + + 1.8 + 1.8 + UTF-8 + 4.3.19.RELEASE + + + @@ -44,63 +54,63 @@ org.springframework spring-core - 4.2.0.RELEASE + ${spring.version} org.springframework spring-beans - 4.2.0.RELEASE + ${spring.version} org.springframework spring-context - 4.2.0.RELEASE + ${spring.version} org.springframework spring-context-support - 4.2.0.RELEASE + ${spring.version} org.springframework spring-web - 4.2.0.RELEASE + ${spring.version} org.springframework spring-test - 4.2.0.RELEASE + ${spring.version} org.springframework spring-webmvc - 4.2.0.RELEASE + ${spring.version} org.springframework spring-tx - 4.2.0.RELEASE + ${spring.version} org.springframework spring-jdbc - 4.2.0.RELEASE + ${spring.version} org.springframework spring-aop - 4.2.0.RELEASE + ${spring.version} org.springframework spring-aspects - 4.2.0.RELEASE + ${spring.version} @@ -117,7 +127,7 @@ mysql mysql-connector-java - 5.1.30 + 8.0.11 @@ -154,7 +164,7 @@ commons-fileupload commons-fileupload - 1.2.2 + 1.3.3 commons-io @@ -196,7 +206,6 @@ 26.0-jre - com.github.pagehelper pagehelper @@ -205,7 +214,7 @@ com.alibaba fastjson - 1.2.47 + 1.2.72 @@ -217,12 +226,6 @@ - - 1.8 - 1.8 - UTF-8 - - diff --git a/ForestBlog/src/main/resources/db.properties b/ForestBlog/src/main/resources/db.properties index 212c7ce0..8e005222 100755 --- a/ForestBlog/src/main/resources/db.properties +++ b/ForestBlog/src/main/resources/db.properties @@ -1,4 +1,5 @@ #MySQL +mysql.driver=com.mysql.cj.jdbc.Driver mysql.url=jdbc:mysql://127.0.0.1:3306/forest_blog?useUnicode=true&characterEncoding=utf8 mysql.username=root mysql.password=123456 diff --git a/ForestBlog/src/main/resources/spring/spring-mybatis.xml b/ForestBlog/src/main/resources/spring/spring-mybatis.xml index d1dddcc0..9614f4e6 100644 --- a/ForestBlog/src/main/resources/spring/spring-mybatis.xml +++ b/ForestBlog/src/main/resources/spring/spring-mybatis.xml @@ -20,7 +20,7 @@ - + diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Public/framework.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Public/framework.jsp index c738db61..2fbe88b5 100755 --- a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Public/framework.jsp +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Public/framework.jsp @@ -98,15 +98,6 @@ 评论 -
  • - - 用户 - -
    -
    全部用户
    -
    添加用户
    -
    -
  • 设置
    From fbcebfd55eaf14af9739f2b50a9bc303afa906de Mon Sep 17 00:00:00 2001 From: saysky <847064370@qq.com> Date: Sat, 10 Oct 2020 16:35:05 +0800 Subject: [PATCH 04/26] update README.md --- README.md | 134 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 86 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 90b024e7..b69dbb6d 100755 --- a/README.md +++ b/README.md @@ -1,20 +1,27 @@ -最新消息,SpringCloud 博客、音乐、商城、论坛系统开发中,开源,[sens-parent](https://github.com/saysky/sens-parent)
    最新消息,SpringBoot博客已经开源,[SENS](https://github.com/saysky/SENS)
    -最新消息 SpringBoot/SSM两个版本 [初云博客-SpringBoot版本](https://github.com/saysky/ChuyunBlog) -# 关于项目 - -该博客是基于SSM实现的一个个人博客系统,适合初学SSM和个人博客制作的同学学习。 -主要涉及技术包括的包括 Maven、Spring、SpringMVC、MyBatis、Redis、JSP等。 -前端采用Layui框架和扒了一个[网站](http://liuyanzhao.com)的前台样式。
    -详细介绍:[https://liuyanzhao.com/6347.html](https://liuyanzhao.com/6347.html) - -最新写了一篇该项目的毕业设计论文,需要的朋友可以联系 +最新消息 SpringBoot/SSM/Duubo多个版本 [初云博客-SpringBoot版本](https://github.com/saysky/ChuyunBlog)
    +[博主付费商品](https://liuyanzhao.com/shop.html) -博主提供该项目的讲解,问题解决,部署等服务 +# 关于项目 +该博客是基于SSM实现的个人博客系统,适合初学SSM和个人博客制作的同学学习。
    +不支持用户注册,需要多用户的可以去看 [SENS](https://github.com/saysky/SENS) 和 [ChuyunBlog](https://github.com/saysky/ChuyunBlog)
    +主要涉及技术包括的包括 Maven、Spring、SpringMVC、MyBatis、Redis、JSP、MySQL等。
    +详细介绍:[https://liuyanzhao.com/6347.html](https://liuyanzhao.com/6347.html)
    + +**博主提供有偿服务** +- 远程调试环境和运行项目 50 +- 项目论文 200 +- 项目详细讲解2-3小时 200-300 +- 部署到云服务器 200 +- 项目和部分功能定制 200-500 +- 毕业设计定制 1000-1500 ## 效果预览 -因博主服务器数量有限,目前该SSM博客已下线,不提供实时预览,大家可以本地部署。目前部署的是SpringBoot+MyBatis+FreeMarker的博客(已开源:[SENS](https://github.com/saysky/SENS)),样式差不多,特此说明。
    -预览地址:http://blog.liuyanzhao.com
    +因博主服务器数量有限,目前该SSM博客已下线,不提供实时预览,大家可以本地部署。
    +目前 SENS 部署了,效果和该项目前端相似,预览地址 https://blog.liuyanzhao.com 。
    +以及博主个人博客主站 https://liuyanzhao.com 也是基于 springboot+vuejs 开发。
    +
    + 前台效果图
    ![image](uploads/home.png)
    @@ -22,66 +29,82 @@ ![image](uploads/admin.png)
    后台地址:/admin 或者 /login
    -为了避免大家删除数据,暂时不给后台账号 + ## 使用注意 #### 1.开发工具的选择 请使用 IntelliJ IDEA, 尽量不要用 Eclipse/MyEclipse,使用前者项目起不来我可以帮忙解决,后者直接忽视(理论上可以起) #### 2.确保你安装了 Maven -没有用过 `Maven` 的童鞋,感觉去学一下,安装一下,可以使用 3.3.9 或 3.5.0的版本 +从官网下载 Maven,并配置阿里云镜像,IDEA 或 Eclipse 里需要设置 Maven 的 settings.xml 。 #### 3.请安装 Lombok 插件 -代码中多次使用 `@Data` 注解,请确保你的 IDE 安装了 `Lombok` 插件,否则找不到 getter/setter 方法 - -#### 4.确保数据库版本是5.x 版本,8.x版本需要修改配置 -对于MySQL8.x版本需要修改 pom.xml 里MySQL驱动版本和数据库驱动名称 - +代码中多次使用 `@Data` 注解,请确保你的 IDE 安装了 `Lombok` 插件,否则找不到 getter/setter 方法。如果你的 lombok 无效,可能是 pom.xml 里的 lombok 版本和你安装的lombok 版本相差较大。
    +无论是 Eclipse 还是 IDEA 都需要安装 lombok。 -#### 5.项目首页没有文件夹名称 +#### 4.项目首页没有文件夹名称 确保 tomcat 配置中 `application context` 是 /,而不是 /ForestBlog。这是导致你们首页css样式全无的原因,因为引用css路径都是 /xxx/xxx.css ![image](https://github.com/saysky/ForestBlog/blob/master/uploads/tomcat.png) -具体情况请看步骤 ## 使用步骤 任何问题都可以联系我
    +简单的我可以直接口头回复你,复杂的可以有偿远程帮你。
    Q Q:847064370
    微信:847064370
    在线留言:[https://liuyanzhao.com/message.html](https://liuyanzhao.com/message.html) #### 1、克隆项目
    克隆或者下载项目到本地,解压,主要分为三个部分:ForestBlog、uploads 和 forest_blog.sql
    -ForestBlog: 完整项目源码, 可以使用 IDEA 导入或者打开
    +ForestBlog: 完整项目源码, 可以使用 IDEA 导入或者打开,记得要导入里面那个 ForestBlog项目,即 pom.xml所在的父目录。
    uploads: 上传图片的目录,与源码分离开来,可以放到物理磁盘某一目录,如D盘某目录,后面会讲
    forest_blog.sql: 数据库文件,请先创建数据库,然后以运行sql文件方式导入
    -#### 2.使用 IDEA 导入项目 -确保你安装了 Maven,导入项目时,选择已存在的项目,类型是 Maven 项目 +#### 2.使用 IDEA 导入Maven项目 +确保你安装了 Maven,导入项目时,选择已存在的项目,类型是 Maven 项目。
    +等待Maven下载完依赖,或者手动点击刷新,如果无法下载请检查 Maven 配置和切换网络,多次尝试。
    +导入完成后,如果出现Java类里红色报错,多半是 Lombok 插件没有安装。 + #### 3、 导入数据库
    新建数据库 `forest_blog`,导入数据库(即forest_blog.sql)。注意,数据库的编码和排序规则是utf-8和utf-8_general_ci
    -数据库默认用户名 root,密码 123456 + #### 4、修改项目中的数据库连接信息
    修改 `db.properties` 文件,该文件很容易找到,在 src/main/resources 中
    里面有 MySQL, 请确保已安装和启动 MySQL
    注意修改数据库地址、表名、用户名和密码。
    +否则项目无法启动 -#### 5、配置 uploads 目录
    +#### 5、配置 tomcat 和 uploads 目录
    +该项目是 SSM 项目,没有启动类,需要通过 tomcat 来运行。无论是 Eclipse 还是 IDEA 都很容易。
    +这里主要说一下上传目录映射问题:
    该项目中,文件上传是传到本地,且和项目文件夹不在一起,就是说是源码和上传目录是分离的。
    -比如我们把 uploads 目录放到 E盘根目录,比如有一张图片路径是 `E:/uploads/2017/10/avatar.jpg`, 我们想在项目中以 `http://loclahost:8080/uploads/2017/10/avatar.jpg ` 方式访问,需要以下两步:
    +比如我们把 uploads 目录放到 E盘根目录(建议直接把我的那个uploads文件夹拷贝到D盘根目录),比如有一张图片路径是 `D:/uploads/2017/10/avatar.jpg`, 我们想在项目中以 `http://loclahost:8080/uploads/2017/10/avatar.jpg ` 方式访问,需要以下两步:
    -1. 修改 UploadFileController.java 中上传路径,需要修改 rootPath 为你指定的 uploads 目录,如 `String rootPath ="E:/uploads/";`
    +1、 修改 UploadFileController.java 中上传路径,需要修改 rootPath 为你指定的 uploads 目录,如 `String rootPath ="D:/uploads/";`
    如果不修改,会出现无法上传失败;
    -2. 给 IDEA 设置静态资源映射,在 tomcat 配置中 Deployment 里面添加,如图 -![image](https://github.com/saysky/ForestBlog/blob/master/uploads/tomcat2.png) +2、为 tomcat 设置 uploads 映射。
    +- IDEA 操作如下:
    +在 tomcat 配置中 Deployment 里面添加,如图 +![image](uploads/tomcat.png) +![image](uploads/tomcat2.png) + +- Eclispe 操作如下:
    +在 Server/server.xml 的 前面添加 +``` + + +``` +- Linux 服务器环境部署 -如果你是在 Linux 服务器上部署,需要在 Tomcat 配置文件中添加
    在 tomcat/conf/server.xml 的 Host 标签内添加如下代码
    -`` +``` + + +``` 如果不修改,会出现uploads的图片无法加载,无法显示上传目录的图片 @@ -94,22 +117,37 @@ Github地址:https://github.com/saysky/ForestBlog 第二次更新:2018年11月26日
    大更,重新规范了代码,完善了注释 -首次提交:2017年10月10日
    - -### 新的架构博客已开源,需要的可以联系博主 -2019年2月(已完成)
    -基于 SpringBoot+ElasticSearch+Shiro+FreeMarker+AdminLte实现,几乎重做,预览地址:http://blog.liuyanzhao.com
    -[SENS](https://github.com/saysky/SENS) - -2019年7月(开发中)
    -前端使用 Vue Element UI改造,后端优化
    - +首次完全提交:2017年10月10日
    ## 请喝一杯奶茶 请我喝一杯奶茶吧! 插条广告:博主最近有点时间,长期接毕设定制,软件定制,Java问题解决
    -具体查看[有偿服务](https://liuyanzhao.com/bulletin/my-service) - -![image](https://github.com/saysky/ForestBlog/blob/master/uploads/donate.png) - - +具体查看[有偿服务](https://liuyanzhao.com/bulletin/my-service)
    +博主付费商品:[https://liuyanzhao.com/shop.html](https://liuyanzhao.com/shop.html) + +![image](uploads/donate.png) + + +## 关于开源和闭源 +1. 项目来源 +答:在开发这个项目的时候,我还是一介学生,也是初学者,做这个项目就是为了巩固一下知识。
    +我记得是2017年暑假边学SSM边做的,在这之前我已经用PHP(ThinkPHP)做过几个网站和博客。
    +当时想2个月就完全做完,但是效率还是比较低,经常本末倒置,在一些细节地方卡很久。最终9月底10月初才完全做好,然后上传到GitHub。
    +开源的初心很简单,就是分享给大家,不求回报的(因为当初年少的我也不知道这里面有make money的途径)。
    +但是,后来某种原因,我放弃了这个项目,这个项目没有得到继续更新和维护。如果我坚持去做这件事,我相信会做的很不错,后来我也发现很多博主做了类似的事,我很欣赏他们。
    + +2. 对开源的看法?为什么不想继续开源了? +答:我很欣赏 GitHub 上每一个愿意开源的作者,我曾经也是其中的一员,我也衷心希望你们能坚持下去,你们是正道的光。
    +开源让路更宽,闭源让路越走越窄。
    +而我就是从开源走向闭源的一个人,当初(大致18年初)有很多朋友陆续告诉我闲鱼和淘宝上有很多出售我的开源项目,我也去找过那些卖家,有些卖家是下架了,有些把我拉黑了。
    +我意识到有一大批人从 GitHub 上下载代码然后拿到闲鱼或淘宝去卖,通过信息差来赚钱,其获利不菲。我挺不屑的,我不会去做这些肮脏的事,但是我也不允许这样的事继续发生。
    +所以,我不想再开源新的项目了,即便是开源,也是部分开源,需要完整的请联系我,既然他们能拿我的项目赚钱,为什么我不能拿自己的项目赚钱呢?
    +也许我是一个心胸狭窄的人,我是否应该忽视那些人的行为,只做自己喜欢的事,只要你把开源这件事做好,持之以恒。会有越来越多的人加入你,一起帮你去做。来日方长,必将有所作为。
    +不,我没有做到,我确实狭隘了。我放弃了开源,转而开始思考知识变现的问题,毕竟我很穷,我需要先考虑生存,先make money,如果等开源给我带来的红利或许需要3年5年,我等不及,我确实low了,我现在发现。
    + +3. 未来 +答:在未来3年内,我首先考虑的还是 make money。
    +后面的话,我觉得我应该不缺钱了,至少基本够用了,我会去做一些东西,大家都需要的东西,完全开源,我觉得只有一个人无欲无求的时候,做的事情才是最高尚的。
    +让我先堕落三年吧!三年后,2023年,我会重新回到开源的世界。
    + +-- 2020年10月10日 更新 \ No newline at end of file From 818ed298b107bc6d1dc9621c269b3112d69f0d99 Mon Sep 17 00:00:00 2001 From: saysky <847064370@qq.com> Date: Wed, 14 Oct 2020 16:27:35 +0800 Subject: [PATCH 05/26] =?UTF-8?q?fix=20ajax=E4=B8=AD=E6=96=87=E4=B9=B1?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/AdminController.java | 30 +++++++++---------- .../admin/BackCommentController.java | 2 +- .../controller/admin/BackUserController.java | 4 +-- .../controller/home/ArticleController.java | 4 +-- .../blog/controller/home/LinkController.java | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/AdminController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/AdminController.java index 560b30a8..888403ef 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/AdminController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/AdminController.java @@ -45,13 +45,13 @@ public class AdminController { * @return */ @RequestMapping("/admin") - public String index(Model model) { + public String index(Model model) { //文章列表 List
    articleList = articleService.listRecentArticle(5); - model.addAttribute("articleList",articleList); + model.addAttribute("articleList", articleList); //评论列表 List commentList = commentService.listRecentComment(5); - model.addAttribute("commentList",commentList); + model.addAttribute("commentList", commentList); return "Admin/index"; } @@ -72,29 +72,29 @@ public String loginPage() { * @param response * @return */ - @RequestMapping(value = "/loginVerify",method = RequestMethod.POST) + @RequestMapping(value = "/loginVerify", method = RequestMethod.POST, produces = {"text/plain;charset=UTF-8"}) @ResponseBody - public String loginVerify(HttpServletRequest request, HttpServletResponse response) { + public String loginVerify(HttpServletRequest request, HttpServletResponse response) { Map map = new HashMap(); String username = request.getParameter("username"); String password = request.getParameter("password"); String rememberme = request.getParameter("rememberme"); User user = userService.getUserByNameOrEmail(username); - if(user==null) { - map.put("code",0); - map.put("msg","用户名无效!"); - } else if(!user.getUserPass().equals(password)) { - map.put("code",0); - map.put("msg","密码错误!"); + if (user == null) { + map.put("code", 0); + map.put("msg", "用户名无效!"); + } else if (!user.getUserPass().equals(password)) { + map.put("code", 0); + map.put("msg", "密码错误!"); } else { //登录成功 - map.put("code",1); - map.put("msg",""); + map.put("code", 1); + map.put("msg", ""); //添加session request.getSession().setAttribute("user", user); //添加cookie - if(rememberme!=null) { + if (rememberme != null) { //创建两个Cookie对象 Cookie nameCookie = new Cookie("username", username); //设置Cookie的有效期为3天 @@ -120,7 +120,7 @@ public String loginVerify(HttpServletRequest request, HttpServletResponse respon * @return */ @RequestMapping(value = "/admin/logout") - public String logout(HttpSession session) { + public String logout(HttpSession session) { session.removeAttribute("user"); session.invalidate(); return "redirect:/login"; diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackCommentController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackCommentController.java index b0a05111..4b9b950b 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackCommentController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackCommentController.java @@ -55,7 +55,7 @@ public String commentListView(@RequestParam(required = false, defaultValue = "1" * @param request * @param comment */ - @RequestMapping(value = "/insert", method = {RequestMethod.POST}) + @RequestMapping(value = "/insert", method = {RequestMethod.POST}, produces = {"text/plain;charset=UTF-8"}) @ResponseBody public void insertComment(HttpServletRequest request, Comment comment) { //添加评论 diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackUserController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackUserController.java index cb35ec6e..c1b2920e 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackUserController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackUserController.java @@ -62,7 +62,7 @@ public ModelAndView insertUserView() { * @param request * @return */ - @RequestMapping(value = "/checkUserName",method = RequestMethod.POST) + @RequestMapping(value = "/checkUserName",method = RequestMethod.POST, produces = {"text/plain;charset=UTF-8"}) @ResponseBody public String checkUserName(HttpServletRequest request) { Map map = new HashMap(); @@ -89,7 +89,7 @@ public String checkUserName(HttpServletRequest request) { * @param request * @return */ - @RequestMapping(value = "/checkUserEmail",method = RequestMethod.POST) + @RequestMapping(value = "/checkUserEmail",method = RequestMethod.POST, produces = {"text/plain;charset=UTF-8"}) @ResponseBody public String checkUserEmail(HttpServletRequest request) { Map map = new HashMap(); diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/ArticleController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/ArticleController.java index 1b9c8bbf..38c78fff 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/ArticleController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/ArticleController.java @@ -104,7 +104,7 @@ public String getArticleDetailPage(@PathVariable("articleId") Integer articleId, * @param id 文章ID * @return 点赞量数量 */ - @RequestMapping(value = "/article/like/{id}", method = {RequestMethod.POST}) + @RequestMapping(value = "/article/like/{id}", method = {RequestMethod.POST}, produces = {"text/plain;charset=UTF-8"}) @ResponseBody public String increaseLikeCount(@PathVariable("id") Integer id) { Article article = articleService.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), id); @@ -120,7 +120,7 @@ public String increaseLikeCount(@PathVariable("id") Integer id) { * @param id 文章ID * @return 访问量数量 */ - @RequestMapping(value = "/article/view/{id}", method = {RequestMethod.POST}) + @RequestMapping(value = "/article/view/{id}", method = {RequestMethod.POST}, produces = {"text/plain;charset=UTF-8"}) @ResponseBody public String increaseViewCount(@PathVariable("id") Integer id) { Article article = articleService.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), id); diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/LinkController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/LinkController.java index d14e35c2..f0f07f0f 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/LinkController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/LinkController.java @@ -38,7 +38,7 @@ public String applyLinkView(Model model) { } - @RequestMapping(value = "/applyLinkSubmit",method = {RequestMethod.POST}) + @RequestMapping(value = "/applyLinkSubmit",method = {RequestMethod.POST}, produces = {"text/plain;charset=UTF-8"}) @ResponseBody public void applyLinkSubmit(Link link) { link.setLinkStatus(LinkStatus.HIDDEN.getValue()); From fb2a513e14f22ae8cbb1cb633d792a6a091fc970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A8=80=E6=9B=8C?= <847064370@qq.com> Date: Wed, 21 Oct 2020 01:35:42 +0800 Subject: [PATCH 06/26] Update db.properties update jdbc url --- ForestBlog/src/main/resources/db.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ForestBlog/src/main/resources/db.properties b/ForestBlog/src/main/resources/db.properties index 8e005222..cec7879c 100755 --- a/ForestBlog/src/main/resources/db.properties +++ b/ForestBlog/src/main/resources/db.properties @@ -1,5 +1,5 @@ #MySQL mysql.driver=com.mysql.cj.jdbc.Driver -mysql.url=jdbc:mysql://127.0.0.1:3306/forest_blog?useUnicode=true&characterEncoding=utf8 +mysql.url=jdbc:mysql://127.0.0.1:3306/forest_blog?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC mysql.username=root mysql.password=123456 From 915daa7c97c9794a967e30bbca3e1cd0d44d3813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A8=80=E6=9B=8C?= <847064370@qq.com> Date: Sat, 24 Oct 2020 17:57:38 +0800 Subject: [PATCH 07/26] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b69dbb6d..b62aa0a2 100755 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ 不支持用户注册,需要多用户的可以去看 [SENS](https://github.com/saysky/SENS) 和 [ChuyunBlog](https://github.com/saysky/ChuyunBlog)
    主要涉及技术包括的包括 Maven、Spring、SpringMVC、MyBatis、Redis、JSP、MySQL等。
    详细介绍:[https://liuyanzhao.com/6347.html](https://liuyanzhao.com/6347.html)
    +预览地址 [https://forestblog.liuyanzhao.com](https://forestblog.liuyanzhao.com) **博主提供有偿服务** - 远程调试环境和运行项目 50 @@ -150,4 +151,4 @@ Github地址:https://github.com/saysky/ForestBlog 后面的话,我觉得我应该不缺钱了,至少基本够用了,我会去做一些东西,大家都需要的东西,完全开源,我觉得只有一个人无欲无求的时候,做的事情才是最高尚的。
    让我先堕落三年吧!三年后,2023年,我会重新回到开源的世界。
    --- 2020年10月10日 更新 \ No newline at end of file +-- 2020年10月10日 更新 From 7deec931ec4a13059a8fc91ac5f7b7520b8104a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A8=80=E6=9B=8C?= <847064370@qq.com> Date: Fri, 18 Dec 2020 16:39:16 +0800 Subject: [PATCH 08/26] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b62aa0a2..9561d0fd 100755 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ # 关于项目 该博客是基于SSM实现的个人博客系统,适合初学SSM和个人博客制作的同学学习。
    不支持用户注册,需要多用户的可以去看 [SENS](https://github.com/saysky/SENS) 和 [ChuyunBlog](https://github.com/saysky/ChuyunBlog)
    -主要涉及技术包括的包括 Maven、Spring、SpringMVC、MyBatis、Redis、JSP、MySQL等。
    +主要涉及技术包括的包括 Maven、Spring、SpringMVC、MyBatis、JSP、MySQL等。
    详细介绍:[https://liuyanzhao.com/6347.html](https://liuyanzhao.com/6347.html)
    预览地址 [https://forestblog.liuyanzhao.com](https://forestblog.liuyanzhao.com) From 5679048530a368260232e4ec1406994f8f3750ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A8=80=E6=9B=8C?= <847064370@qq.com> Date: Wed, 27 Jan 2021 14:49:08 +0800 Subject: [PATCH 09/26] Update Category.java --- .../main/java/com/liuyanzhao/ssm/blog/entity/Category.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/Category.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/Category.java index 6244d429..904f7676 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/Category.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/Category.java @@ -48,6 +48,8 @@ public Category(Integer categoryId, String categoryName) { public Category(Integer categoryId) { this.categoryId = categoryId; } + + public Category() {} /** * 未分类 @@ -59,4 +61,4 @@ public static Category Default() { } -} \ No newline at end of file +} From 7656ce2dbe9931eb024dce7c89be990e631fd136 Mon Sep 17 00:00:00 2001 From: saysky <847064370@qq.com> Date: Thu, 25 Feb 2021 18:28:43 +0800 Subject: [PATCH 10/26] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86=E7=AD=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 14 +- ForestBlog/pom.xml | 17 + .../controller/admin/AdminController.java | 120 +++++- .../admin/BackArticleController.java | 110 +++++- .../admin/BackCommentController.java | 94 ++++- .../controller/admin/BackUserController.java | 16 - .../admin/UploadFileController.java | 3 +- .../controller/home/CommentController.java | 31 +- .../blog/controller/home/IndexController.java | 11 +- .../liuyanzhao/ssm/blog/entity/Comment.java | 9 +- .../com/liuyanzhao/ssm/blog/entity/User.java | 5 + .../com/liuyanzhao/ssm/blog/enums/Role.java | 4 +- .../liuyanzhao/ssm/blog/enums/UserRole.java | 40 ++ .../blog/interceptor/AdminInterceptor.java | 45 +++ .../blog/interceptor/LoginInterceptor.java | 39 ++ .../blog/interceptor/SecurityInterceptor.java | 1 + .../ssm/blog/mapper/ArticleMapper.java | 17 +- .../ssm/blog/mapper/CommentMapper.java | 33 +- .../ssm/blog/service/ArticleService.java | 2 +- .../ssm/blog/service/CommentService.java | 15 +- .../blog/service/impl/ArticleServiceImpl.java | 21 +- .../blog/service/impl/CommentServiceImpl.java | 28 +- .../blog/service/impl/UserServiceImpl.java | 19 + ForestBlog/src/main/resources/db.properties | 2 +- .../main/resources/mapper/ArticleMapper.xml | 20 +- .../main/resources/mapper/CommentMapper.xml | 48 ++- .../src/main/resources/mapper/UserMapper.xml | 8 +- .../src/main/resources/spring/spring-mvc.xml | 74 +++- .../WEB-INF/view/Admin/Article/index.jsp | 5 + .../WEB-INF/view/Admin/Comment/index.jsp | 10 +- .../WEB-INF/view/Admin/Comment/reply.jsp | 19 - .../WEB-INF/view/Admin/Public/framework.jsp | 35 +- .../WEB-INF/view/Admin/User/editProfile.jsp | 147 ++++++++ .../WEB-INF/view/Admin/User/profile.jsp | 5 +- .../main/webapp/WEB-INF/view/Admin/login.jsp | 3 +- .../webapp/WEB-INF/view/Admin/register.jsp | 165 +++++++++ .../webapp/WEB-INF/view/Home/Error/403.jsp | 62 ++++ .../WEB-INF/view/Home/Page/articleDetail.jsp | 51 +-- .../WEB-INF/view/Home/Public/part/header.jsp | 4 +- .../main/webapp/resource/assets/css/style.css | 2 +- .../resource/assets/img/avatar/avatar.png | Bin 0 -> 538302 bytes .../resource/assets/img/avatar/avatar1.jpg | Bin 0 -> 27063 bytes .../resource/assets/img/avatar/avatar2.jpeg | Bin 0 -> 46932 bytes .../resource/assets/img/avatar/avatar3.jpeg | Bin 0 -> 16346 bytes .../ssm/blog/mapper/ArticleMapperTest.java | 31 ++ .../ssm/blog/service/ArticleServiceTest.java | 2 +- .../ssm/blog/service/UserServiceTest.java | 2 +- forest_blog.sql | 348 +++++++++++++++--- 48 files changed, 1498 insertions(+), 239 deletions(-) mode change 100644 => 100755 .gitignore create mode 100644 ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/enums/UserRole.java create mode 100755 ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/AdminInterceptor.java create mode 100755 ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/LoginInterceptor.java create mode 100755 ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/editProfile.jsp create mode 100755 ForestBlog/src/main/webapp/WEB-INF/view/Admin/register.jsp create mode 100755 ForestBlog/src/main/webapp/WEB-INF/view/Home/Error/403.jsp create mode 100644 ForestBlog/src/main/webapp/resource/assets/img/avatar/avatar.png create mode 100755 ForestBlog/src/main/webapp/resource/assets/img/avatar/avatar1.jpg create mode 100755 ForestBlog/src/main/webapp/resource/assets/img/avatar/avatar2.jpeg create mode 100755 ForestBlog/src/main/webapp/resource/assets/img/avatar/avatar3.jpeg create mode 100644 ForestBlog/src/test/java/com/liuyanzhao/ssm/blog/mapper/ArticleMapperTest.java diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 817acb6e..032ce5c8 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ !.mvn/wrapper/maven-wrapper.jar -target/ + ### STS ### .apt_generated .classpath @@ -13,6 +13,8 @@ target/ *.iws *.iml *.ipr +*.log +*.gz ### NetBeans ### nbproject/private/ @@ -22,5 +24,11 @@ dist/ nbdist/ .nb-gradle/ -#Mac -.DS_Store \ No newline at end of file +.DS_Store + +target/ +.mvn/ +mvnw.cmd +mvnw +sens-log/ +/templates \ No newline at end of file diff --git a/ForestBlog/pom.xml b/ForestBlog/pom.xml index 6cf869cc..2aaf34f9 100755 --- a/ForestBlog/pom.xml +++ b/ForestBlog/pom.xml @@ -14,6 +14,7 @@ 1.8 UTF-8 4.3.19.RELEASE + 2.10.1 @@ -224,6 +225,22 @@ 4.1.13 + + com.fasterxml.jackson.core + jackson-databind + ${jackson-databind-version} + + + com.fasterxml.jackson.core + jackson-core + ${jackson-databind-version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson-databind-version} + + diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/AdminController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/AdminController.java index 888403ef..9b4450ee 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/AdminController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/AdminController.java @@ -1,8 +1,10 @@ package com.liuyanzhao.ssm.blog.controller.admin; +import com.liuyanzhao.ssm.blog.dto.JsonResult; import com.liuyanzhao.ssm.blog.entity.Article; import com.liuyanzhao.ssm.blog.entity.Comment; import com.liuyanzhao.ssm.blog.entity.User; +import com.liuyanzhao.ssm.blog.enums.UserRole; import com.liuyanzhao.ssm.blog.service.ArticleService; import com.liuyanzhao.ssm.blog.service.CommentService; import com.liuyanzhao.ssm.blog.service.UserService; @@ -10,9 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -45,12 +49,19 @@ public class AdminController { * @return */ @RequestMapping("/admin") - public String index(Model model) { + public String index(Model model, HttpSession session) { + User user = (User) session.getAttribute("user"); + Integer userId = null; + if (!UserRole.ADMIN.getValue().equals(user.getUserRole())) { + // 用户查询自己的文章, 管理员查询所有的 + userId = user.getUserId(); + } //文章列表 - List
    articleList = articleService.listRecentArticle(5); + List
    articleList = articleService.listRecentArticle(userId, 5); model.addAttribute("articleList", articleList); + //评论列表 - List commentList = commentService.listRecentComment(5); + List commentList = commentService.listRecentComment(userId, 5); model.addAttribute("commentList", commentList); return "Admin/index"; } @@ -65,6 +76,17 @@ public String loginPage() { return "Admin/login"; } + + /** + * 登录页面显示 + * + * @return + */ + @RequestMapping("/register") + public String registerPage() { + return "Admin/register"; + } + /** * 登录验证 * @@ -113,6 +135,47 @@ public String loginVerify(HttpServletRequest request, HttpServletResponse respon return result; } + /** + * 登录验证 + * + * @param request + * @return + */ + @RequestMapping(value = "/registerSubmit", method = RequestMethod.POST) + @ResponseBody + public JsonResult registerSubmit(HttpServletRequest request) { + String username = request.getParameter("username"); + String nickname = request.getParameter("nickname"); + String email = request.getParameter("email"); + String password = request.getParameter("password"); + User checkUserName = userService.getUserByName(username); + if (checkUserName != null) { + return new JsonResult().fail("用户名已存在"); + } + User checkEmail = userService.getUserByEmail(username); + if (checkEmail != null) { + return new JsonResult().fail("电子邮箱已存在"); + } + + // 添加用户 + User user = new User(); + user.setUserAvatar("/img/avatar/avatar.png"); + user.setUserName(username); + user.setUserNickname(nickname); + user.setUserPass(password); + user.setUserEmail(email); + user.setUserStatus(1); + user.setArticleCount(0); + user.setUserRole(UserRole.USER.getValue()); + try { + userService.insertUser(user); + } catch (Exception e) { + e.printStackTrace(); + return new JsonResult().fail("系统异常"); + } + return new JsonResult().ok("注册成功"); + } + /** * 退出登录 * @@ -127,4 +190,55 @@ public String logout(HttpSession session) { } + /** + * 基本信息页面显示 + * + * @return + */ + @RequestMapping(value = "/admin/profile") + public ModelAndView userProfileView(HttpSession session) { + + ModelAndView modelAndView = new ModelAndView(); + User sessionUser = (User) session.getAttribute("user"); + User user = userService.getUserById(sessionUser.getUserId()); + modelAndView.addObject("user", user); + + modelAndView.setViewName("Admin/User/profile"); + return modelAndView; + } + + /** + * 编辑个人信息页面显示 + * + * @param loginUser + * @return + */ + @RequestMapping(value = "/admin/profile/edit") + public ModelAndView editUserView(HttpSession session) { + ModelAndView modelAndView = new ModelAndView(); + User loginUser = (User) session.getAttribute("user"); + User user = userService.getUserById(loginUser.getUserId()); + modelAndView.addObject("user", user); + + modelAndView.setViewName("Admin/User/editProfile"); + return modelAndView; + } + + + /** + * 编辑用户提交 + * + * @param user + * @return + */ + @RequestMapping(value = "/admin/profile/save", method = RequestMethod.POST) + public String saveProfile(User user, HttpSession session) { + User dbUser = (User) session.getAttribute("user"); + + user.setUserId(dbUser.getUserId()); + userService.updateUser(user); + return "redirect:/admin/profile"; + } + + } diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackArticleController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackArticleController.java index 86941d64..459e1a45 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackArticleController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackArticleController.java @@ -3,7 +3,9 @@ import cn.hutool.http.HtmlUtil; import com.github.pagehelper.PageInfo; import com.liuyanzhao.ssm.blog.dto.ArticleParam; +import com.liuyanzhao.ssm.blog.dto.JsonResult; import com.liuyanzhao.ssm.blog.entity.Article; +import com.liuyanzhao.ssm.blog.enums.UserRole; import com.liuyanzhao.ssm.blog.service.ArticleService; import com.liuyanzhao.ssm.blog.service.CategoryService; import com.liuyanzhao.ssm.blog.service.TagService; @@ -14,16 +16,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Objects; /** @@ -49,7 +49,8 @@ public class BackArticleController { @RequestMapping(value = "") public String index(@RequestParam(required = false, defaultValue = "1") Integer pageIndex, @RequestParam(required = false, defaultValue = "10") Integer pageSize, - @RequestParam(required = false) String status, Model model) { + @RequestParam(required = false) String status, Model model, + HttpSession session) { HashMap criteria = new HashMap<>(1); if (status == null) { model.addAttribute("pageUrlPrefix", "/admin/article?pageIndex"); @@ -57,6 +58,12 @@ public String index(@RequestParam(required = false, defaultValue = "1") Integer criteria.put("status", status); model.addAttribute("pageUrlPrefix", "/admin/article?status=" + status + "&pageIndex"); } + + User user = (User) session.getAttribute("user"); + if (!UserRole.ADMIN.getValue().equals(user.getUserRole())) { + // 用户查询自己的文章, 管理员查询所有的 + criteria.put("userId", user.getUserId()); + } PageInfo
    articlePageInfo = articleService.pageArticle(pageIndex, pageSize, criteria); model.addAttribute("pageInfo", articlePageInfo); return "Admin/Article/index"; @@ -132,8 +139,17 @@ public String insertArticleSubmit(HttpSession session, ArticleParam articleParam * * @param id 文章ID */ - @RequestMapping(value = "/delete/{id}") - public void deleteArticle(@PathVariable("id") Integer id) { + @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST) + public void deleteArticle(@PathVariable("id") Integer id, HttpSession session) { + Article dbArticle = articleService.getArticleByStatusAndId(null, id); + if (dbArticle == null) { + return; + } + User user = (User) session.getAttribute("user"); + // 如果不是管理员,访问其他用户的数据,则跳转403 + if (!Objects.equals(dbArticle.getArticleUserId(), user.getUserId()) && !Objects.equals(user.getUserRole(), UserRole.ADMIN.getValue())) { + return; + } articleService.deleteArticle(id); } @@ -145,22 +161,27 @@ public void deleteArticle(@PathVariable("id") Integer id) { * @return */ @RequestMapping(value = "/edit/{id}") - public ModelAndView editArticleView(@PathVariable("id") Integer id) { - ModelAndView modelAndView = new ModelAndView(); + public String editArticleView(@PathVariable("id") Integer id, Model model, HttpSession session) { Article article = articleService.getArticleByStatusAndId(null, id); - modelAndView.addObject("article", article); + if (article == null) { + return "redirect:/404"; + } + User user = (User) session.getAttribute("user"); + // 如果不是管理员,访问其他用户的数据,则跳转403 + if (!Objects.equals(article.getArticleUserId(), user.getUserId()) && !Objects.equals(user.getUserRole(), UserRole.ADMIN.getValue())) { + return "redirect:/403"; + } + model.addAttribute("article", article); List categoryList = categoryService.listCategory(); - modelAndView.addObject("categoryList", categoryList); + model.addAttribute("categoryList", categoryList); List tagList = tagService.listTag(); - modelAndView.addObject("tagList", tagList); - + model.addAttribute("tagList", tagList); - modelAndView.setViewName("Admin/Article/edit"); - return modelAndView; + return "Admin/Article/edit"; } @@ -171,7 +192,16 @@ public ModelAndView editArticleView(@PathVariable("id") Integer id) { * @return */ @RequestMapping(value = "/editSubmit", method = RequestMethod.POST) - public String editArticleSubmit(ArticleParam articleParam) { + public String editArticleSubmit(ArticleParam articleParam, HttpSession session) { + Article dbArticle = articleService.getArticleByStatusAndId(null, articleParam.getArticleId()); + if (dbArticle == null) { + return "redirect:/404"; + } + User user = (User) session.getAttribute("user"); + // 如果不是管理员,访问其他用户的数据,则跳转403 + if (!Objects.equals(dbArticle.getArticleUserId(), user.getUserId()) && !Objects.equals(user.getUserRole(), UserRole.ADMIN.getValue())) { + return "redirect:/403"; + } Article article = new Article(); article.setArticleId(articleParam.getArticleId()); article.setArticleTitle(articleParam.getArticleTitle()); @@ -208,6 +238,54 @@ public String editArticleSubmit(ArticleParam articleParam) { return "redirect:/admin/article"; } + /** + * 后台添加文章提交操作 + * + * @param articleParam + * @return + */ + @RequestMapping(value = "/insertDraftSubmit", method = RequestMethod.POST) + public String insertDraftSubmit(HttpSession session, ArticleParam articleParam) { + Article article = new Article(); + //用户ID + User user = (User) session.getAttribute("user"); + if (user != null) { + article.setArticleUserId(user.getUserId()); + } + article.setArticleTitle(articleParam.getArticleTitle()); + //文章摘要 + int summaryLength = 150; + String summaryText = HtmlUtil.cleanHtmlTag(articleParam.getArticleContent()); + if (summaryText.length() > summaryLength) { + String summary = summaryText.substring(0, summaryLength); + article.setArticleSummary(summary); + } else { + article.setArticleSummary(summaryText); + } + article.setArticleContent(articleParam.getArticleContent()); + article.setArticleStatus(articleParam.getArticleStatus()); + //填充分类 + List categoryList = new ArrayList<>(); + if (articleParam.getArticleChildCategoryId() != null) { + categoryList.add(new Category(articleParam.getArticleParentCategoryId())); + } + if (articleParam.getArticleChildCategoryId() != null) { + categoryList.add(new Category(articleParam.getArticleChildCategoryId())); + } + article.setCategoryList(categoryList); + //填充标签 + List tagList = new ArrayList<>(); + if (articleParam.getArticleTagIds() != null) { + for (int i = 0; i < articleParam.getArticleTagIds().size(); i++) { + Tag tag = new Tag(articleParam.getArticleTagIds().get(i)); + tagList.add(tag); + } + } + article.setTagList(tagList); + + articleService.insertArticle(article); + return "redirect:/admin"; + } } diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackCommentController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackCommentController.java index 4b9b950b..ebf5e59a 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackCommentController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackCommentController.java @@ -1,10 +1,15 @@ package com.liuyanzhao.ssm.blog.controller.admin; +import cn.hutool.http.HtmlUtil; import com.github.pagehelper.PageInfo; +import com.liuyanzhao.ssm.blog.dto.JsonResult; import com.liuyanzhao.ssm.blog.entity.Article; import com.liuyanzhao.ssm.blog.entity.Comment; +import com.liuyanzhao.ssm.blog.entity.User; import com.liuyanzhao.ssm.blog.enums.ArticleStatus; +import com.liuyanzhao.ssm.blog.enums.Role; +import com.liuyanzhao.ssm.blog.enums.UserRole; import com.liuyanzhao.ssm.blog.util.MyUtils; import com.liuyanzhao.ssm.blog.service.ArticleService; import com.liuyanzhao.ssm.blog.service.CommentService; @@ -14,8 +19,8 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; -import java.util.Date; -import java.util.List; +import javax.servlet.http.HttpSession; +import java.util.*; /** @@ -33,18 +38,47 @@ public class BackCommentController { /** * 评论页面 + * 我发送的评论 * * @param pageIndex 页码 * @param pageSize 页大小 * @return modelAndView */ @RequestMapping(value = "") - public String commentListView(@RequestParam(required = false, defaultValue = "1") Integer pageIndex, - @RequestParam(required = false, defaultValue = "10") Integer pageSize, - Model model) { - PageInfo commentPageInfo = commentService.listCommentByPage(pageIndex, pageSize); + public String commentList(@RequestParam(required = false, defaultValue = "1") Integer pageIndex, + @RequestParam(required = false, defaultValue = "10") Integer pageSize, + HttpSession session, + Model model) { + User user = (User) session.getAttribute("user"); + HashMap criteria = new HashMap<>(); + if (!UserRole.ADMIN.getValue().equals(user.getUserRole())) { + // 用户查询自己的文章, 管理员查询所有的 + criteria.put("userId", user.getUserId()); + } + PageInfo commentPageInfo = commentService.listCommentByPage(pageIndex, pageSize, criteria); + model.addAttribute("pageInfo", commentPageInfo); + model.addAttribute("pageUrlPrefix", "/admin/comment?pageIndex"); + return "Admin/Comment/index"; + } + + + /** + * 评论页面 + * 我收到的评论 + * + * @param pageIndex 页码 + * @param pageSize 页大小 + * @return modelAndView + */ + @RequestMapping(value = "/receive") + public String myReceiveComment(@RequestParam(required = false, defaultValue = "1") Integer pageIndex, + @RequestParam(required = false, defaultValue = "10") Integer pageSize, + HttpSession session, + Model model) { + User user = (User) session.getAttribute("user"); + PageInfo commentPageInfo = commentService.listReceiveCommentByPage(pageIndex, pageSize, user.getUserId()); model.addAttribute("pageInfo", commentPageInfo); - model.addAttribute("pageUrlPrefix","/admin/comment?pageIndex"); + model.addAttribute("pageUrlPrefix", "/admin/comment?pageIndex"); return "Admin/Comment/index"; } @@ -57,13 +91,19 @@ public String commentListView(@RequestParam(required = false, defaultValue = "1" */ @RequestMapping(value = "/insert", method = {RequestMethod.POST}, produces = {"text/plain;charset=UTF-8"}) @ResponseBody - public void insertComment(HttpServletRequest request, Comment comment) { + public void insertComment(HttpServletRequest request, Comment comment, HttpSession session) { + User user = (User) session.getAttribute("user"); + Article article = articleService.getArticleByStatusAndId(null, comment.getCommentArticleId()); + if (article == null) { + return; + } + //添加评论 + comment.setCommentUserId(user.getUserId()); comment.setCommentIp(MyUtils.getIpAddr(request)); comment.setCommentCreateTime(new Date()); commentService.insertComment(comment); //更新文章的评论数 - Article article = articleService.getArticleByStatusAndId(null, comment.getCommentArticleId()); articleService.updateCommentCount(article.getArticleId()); } @@ -73,8 +113,13 @@ public void insertComment(HttpServletRequest request, Comment comment) { * @param id 批量ID */ @RequestMapping(value = "/delete/{id}") - public void deleteComment(@PathVariable("id") Integer id) { + public void deleteComment(@PathVariable("id") Integer id, HttpSession session) { Comment comment = commentService.getCommentById(id); + User user = (User) session.getAttribute("user"); + // 如果不是管理员,访问其他用户的数据,没有权限 + if (!Objects.equals(user.getUserRole(), UserRole.ADMIN.getValue()) && !Objects.equals(comment.getCommentUserId(), user.getUserId())) { + return; + } //删除评论 commentService.deleteComment(id); //删除其子评论 @@ -94,7 +139,12 @@ public void deleteComment(@PathVariable("id") Integer id) { * @return */ @RequestMapping(value = "/edit/{id}") - public String editCommentView(@PathVariable("id") Integer id, Model model) { + public String editCommentView(@PathVariable("id") Integer id, Model model, HttpSession session) { + // 没有权限操作,只有管理员可以操作 + User user = (User) session.getAttribute("user"); + if (!Objects.equals(user.getUserRole(), UserRole.ADMIN.getValue())) { + return "redirect:/403"; + } Comment comment = commentService.getCommentById(id); model.addAttribute("comment", comment); return "Admin/Comment/edit"; @@ -108,7 +158,12 @@ public String editCommentView(@PathVariable("id") Integer id, Model model) { * @return */ @RequestMapping(value = "/editSubmit", method = RequestMethod.POST) - public String editCommentSubmit(Comment comment) { + public String editCommentSubmit(Comment comment, HttpSession session) { + User user = (User) session.getAttribute("user"); + // 没有权限操作,只有管理员可以操作 + if (!Objects.equals(user.getUserRole(), UserRole.ADMIN.getValue())) { + return "redirect:/403"; + } commentService.updateComment(comment); return "redirect:/admin/comment"; } @@ -135,14 +190,27 @@ public String replyCommentView(@PathVariable("id") Integer id, Model model) { * @return */ @RequestMapping(value = "/replySubmit", method = RequestMethod.POST) - public String replyCommentSubmit(HttpServletRequest request, Comment comment) { + public String replyCommentSubmit(HttpServletRequest request, Comment comment, HttpSession session) { //文章评论数+1 Article article = articleService.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), comment.getCommentArticleId()); + if (article == null) { + return "redirect:/404"; + } + User user = (User) session.getAttribute("user"); + comment.setCommentContent(HtmlUtil.escape(comment.getCommentContent())); + comment.setCommentAuthorName(user.getUserNickname()); + comment.setCommentAuthorEmail(user.getUserEmail()); + comment.setCommentAuthorUrl(user.getUserUrl()); article.setArticleCommentCount(article.getArticleCommentCount() + 1); articleService.updateArticle(article); //添加评论 comment.setCommentCreateTime(new Date()); comment.setCommentIp(MyUtils.getIpAddr(request)); + if (Objects.equals(user.getUserId(), article.getArticleUserId())) { + comment.setCommentRole(Role.OWNER.getValue()); + } else { + comment.setCommentRole(Role.VISITOR.getValue()); + } commentService.insertComment(comment); return "redirect:/admin/comment"; } diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackUserController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackUserController.java index c1b2920e..d4dd902e 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackUserController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/BackUserController.java @@ -171,20 +171,4 @@ public String editUserSubmit(User user) { return "redirect:/admin/user"; } - /** - * 基本信息页面显示 - * - * @return - */ - @RequestMapping(value = "/profile") - public ModelAndView userProfileView(HttpSession session) { - - ModelAndView modelAndView = new ModelAndView(); - User sessionUser = (User) session.getAttribute("user"); - User user = userService.getUserById(sessionUser.getUserId()); - modelAndView.addObject("user",user); - - modelAndView.setViewName("Admin/User/profile"); - return modelAndView; - } } diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/UploadFileController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/UploadFileController.java index 28d046fa..7431f47f 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/UploadFileController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/admin/UploadFileController.java @@ -22,7 +22,8 @@ public class UploadFileController { /** * 文件保存目录,物理路径 */ - public final String rootPath = "/Users/liuyanzhao/Documents/uploads"; +// public final String rootPath = "/Users/liuyanzhao/Documents/uploads"; + public final String rootPath = "D:\\uploads"; public final String allowSuffix = ".bmp.jpg.jpeg.png.gif.pdf.doc.zip.rar.gz"; diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/CommentController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/CommentController.java index 53cd0b4f..c6ce0632 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/CommentController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/CommentController.java @@ -4,6 +4,7 @@ import com.liuyanzhao.ssm.blog.dto.JsonResult; import com.liuyanzhao.ssm.blog.entity.Article; import com.liuyanzhao.ssm.blog.entity.Comment; +import com.liuyanzhao.ssm.blog.entity.User; import com.liuyanzhao.ssm.blog.enums.ArticleStatus; import com.liuyanzhao.ssm.blog.enums.Role; import com.liuyanzhao.ssm.blog.service.ArticleService; @@ -13,11 +14,12 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import java.util.Date; +import java.util.Objects; /** * @author 言曌 @@ -34,18 +36,29 @@ public class CommentController { private ArticleService articleService; /** - * '添加评论 + * 添加评论 * * @param request * @param comment */ @RequestMapping(value = "/comment", method = {RequestMethod.POST}) - public JsonResult insertComment(HttpServletRequest request, Comment comment) { + public JsonResult insertComment(HttpServletRequest request, Comment comment, HttpSession session) { + User user = (User) session.getAttribute("user"); + if (user == null) { + return new JsonResult().fail("请先登录"); + } + Article article = articleService.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), comment.getCommentArticleId()); + if (article == null) { + return new JsonResult().fail("文章不存在"); + } + + //添加评论 + comment.setCommentUserId(user.getUserId()); comment.setCommentCreateTime(new Date()); comment.setCommentIp(MyUtils.getIpAddr(request)); - if (request.getSession().getAttribute("user") != null) { - comment.setCommentRole(Role.ADMIN.getValue()); + if (Objects.equals(user.getUserId(), article.getArticleUserId())) { + comment.setCommentRole(Role.OWNER.getValue()); } else { comment.setCommentRole(Role.VISITOR.getValue()); } @@ -53,13 +66,13 @@ public JsonResult insertComment(HttpServletRequest request, Comment comment) { //过滤字符,防止XSS攻击 comment.setCommentContent(HtmlUtil.escape(comment.getCommentContent())); - comment.setCommentAuthorName(HtmlUtil.escape(comment.getCommentAuthorName())); - comment.setCommentAuthorEmail(HtmlUtil.escape(comment.getCommentAuthorEmail())); - comment.setCommentAuthorUrl(HtmlUtil.escape(comment.getCommentAuthorUrl())); + + comment.setCommentAuthorName(user.getUserNickname()); + comment.setCommentAuthorEmail(user.getUserEmail()); + comment.setCommentAuthorUrl(user.getUserUrl()); try { commentService.insertComment(comment); //更新文章的评论数 - Article article = articleService.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), comment.getCommentArticleId()); articleService.updateCommentCount(article.getArticleId()); } catch (Exception e) { e.printStackTrace(); diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/IndexController.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/IndexController.java index 474ab333..040e3e73 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/IndexController.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/controller/home/IndexController.java @@ -62,7 +62,7 @@ public String index(@RequestParam(required = false, defaultValue = "1") Integer List allTagList = tagService.listTag(); model.addAttribute("allTagList", allTagList); //最新评论 - List recentCommentList = commentService.listRecentComment(10); + List recentCommentList = commentService.listRecentComment(null, 10); model.addAttribute("recentCommentList", recentCommentList); model.addAttribute("pageUrlPrefix", "/article?pageIndex"); return "Home/index"; @@ -91,7 +91,7 @@ public String search( List
    mostCommentArticleList = articleService.listArticleByCommentCount(8); model.addAttribute("mostCommentArticleList", mostCommentArticleList); //最新评论 - List recentCommentList = commentService.listRecentComment(10); + List recentCommentList = commentService.listRecentComment(null, 10); model.addAttribute("recentCommentList", recentCommentList); model.addAttribute("pageUrlPrefix", "/search?pageIndex"); return "Home/Page/search"; @@ -103,6 +103,13 @@ public String NotFound(@RequestParam(required = false) String message, Model mod return "Home/Error/404"; } + + @RequestMapping("/403") + public String Page403(@RequestParam(required = false) String message, Model model) { + model.addAttribute("message", message); + return "Home/Error/403"; + } + @RequestMapping("/500") public String ServerError(@RequestParam(required = false) String message, Model model) { model.addAttribute("message", message); diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/Comment.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/Comment.java index 6f856947..31f17798 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/Comment.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/Comment.java @@ -7,10 +7,11 @@ /** * 文章评论 + * * @author liuyanzhao */ @Data -public class Comment implements Serializable{ +public class Comment implements Serializable { private static final long serialVersionUID = -1038897351672911219L; private Integer commentId; @@ -42,9 +43,13 @@ public class Comment implements Serializable{ */ private Integer commentRole; + /** + * 评论用户ID + */ + private Integer commentUserId; + /** * 非数据库字段 */ private Article article; - } \ No newline at end of file diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/User.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/User.java index 88544a9d..326ef3c4 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/User.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/entity/User.java @@ -33,6 +33,11 @@ public class User implements Serializable{ private Integer userStatus; + /** + * 用户角色:admin/user + */ + private String userRole; + /** * 文章数量(不是数据库字段) */ diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/enums/Role.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/enums/Role.java index d4096a6b..a95b01ff 100644 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/enums/Role.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/enums/Role.java @@ -7,8 +7,8 @@ public enum Role { - ADMIN(1, "博主"), - VISITOR(0, "访客"); + OWNER(1, "博主"), + VISITOR(0, "其他用户"); private Integer value; diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/enums/UserRole.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/enums/UserRole.java new file mode 100644 index 00000000..3de0d5a0 --- /dev/null +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/enums/UserRole.java @@ -0,0 +1,40 @@ +package com.liuyanzhao.ssm.blog.enums; + +/** + * 角色枚举 + * + * @author 言曌 + * @date 2021/2/25 2:31 下午 + */ + +public enum UserRole { + + ADMIN("admin", "管理员"), + + USER("user", "用户"); + + private String value; + + private String message; + + UserRole(String value, String message) { + this.value = value; + this.message = message; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/AdminInterceptor.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/AdminInterceptor.java new file mode 100755 index 00000000..7c151209 --- /dev/null +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/AdminInterceptor.java @@ -0,0 +1,45 @@ +package com.liuyanzhao.ssm.blog.interceptor; + +import com.liuyanzhao.ssm.blog.entity.User; +import com.liuyanzhao.ssm.blog.enums.UserRole; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Objects; + + +/** + * @author liuyanzhao + */ +@Component +public class AdminInterceptor extends HandlerInterceptorAdapter { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws IOException { + //这里可以根据session的用户来判断角色的权限,根据权限来转发不同的页面 + User user = (User) request.getSession().getAttribute("user"); + if (user == null) { + response.sendRedirect("/login"); + return false; + } + if (!Objects.equals(user.getUserRole(), UserRole.ADMIN.getValue())) { + return false; + } + return true; + } + + @Override + public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) { + + } + + @Override + public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { + + } +} + diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/LoginInterceptor.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/LoginInterceptor.java new file mode 100755 index 00000000..1201d869 --- /dev/null +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/LoginInterceptor.java @@ -0,0 +1,39 @@ +package com.liuyanzhao.ssm.blog.interceptor; + +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + + +/** + * @author liuyanzhao + */ +@Component +public class LoginInterceptor extends HandlerInterceptorAdapter { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws IOException { + //这里可以根据session的用户来判断角色的权限,根据权限来转发不同的页面 + if(request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + + return true; + } + + @Override + public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) { + + } + + @Override + public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { + + } +} + diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/SecurityInterceptor.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/SecurityInterceptor.java index 6b03d4aa..5bf2a7bb 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/SecurityInterceptor.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/interceptor/SecurityInterceptor.java @@ -23,6 +23,7 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons response.sendRedirect("/login"); return false; } + return true; } diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/mapper/ArticleMapper.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/mapper/ArticleMapper.java index ed86da42..2beb1d42 100644 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/mapper/ArticleMapper.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/mapper/ArticleMapper.java @@ -23,6 +23,14 @@ public interface ArticleMapper { */ Integer deleteById(Integer articleId); + /** + * 根据用户ID删除 + * + * @param userId 用户ID + * @return 影响函数 + */ + Integer deleteByUserId(Integer userId); + /** * 添加文章 * @@ -195,7 +203,7 @@ List
    findArticleByCategoryIds(@Param("categoryIds") List categ * @param limit 查询数量 * @return 列表 */ - List
    listArticleByLimit(Integer limit); + List
    listArticleByLimit(@Param("userId") Integer userId, @Param("limit") Integer limit); /** * 批量删除文章 @@ -204,4 +212,11 @@ List
    findArticleByCategoryIds(@Param("categoryIds") List categ * @return 影响行数 */ Integer deleteBatch(@Param("ids") List ids); + + /** + * 获得一个用户的文章id集合 + * @param userId + * @return + */ + List listArticleIdsByUserId(Integer userId); } \ No newline at end of file diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/mapper/CommentMapper.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/mapper/CommentMapper.java index da94bca6..e8976b35 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/mapper/CommentMapper.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/mapper/CommentMapper.java @@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.HashMap; import java.util.List; @Mapper @@ -55,7 +56,16 @@ public interface CommentMapper { * * @return 列表 */ - List listComment(); + List listComment(HashMap criteria); + + + /** + * 获得某个用户收到的评论 + * + * @return 列表 + */ + List getReceiveComment(List articleIds); + /** * 统计评论数 @@ -70,7 +80,8 @@ public interface CommentMapper { * @param limit 查询数量 * @return 列表 */ - List listRecentComment(@Param(value = "limit") Integer limit); + List listRecentComment(@Param(value = "userId") Integer userId, + @Param(value = "limit") Integer limit); /** * 获得评论的子评论 @@ -79,4 +90,22 @@ public interface CommentMapper { * @return 列表 */ List listChildComment(@Param(value = "id") Integer id); + + + /** + * 根据用户ID删除 + * + * @param userId 用户ID + * @return 影响函数 + */ + Integer deleteByUserId(Integer userId); + + + /** + * 根据文章ID删除 + * + * @param articleId 文章ID + * @return 影响函数 + */ + Integer deleteByArticleId(Integer articleId); } \ No newline at end of file diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/ArticleService.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/ArticleService.java index a4495d8e..f489bdce 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/ArticleService.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/ArticleService.java @@ -67,7 +67,7 @@ public interface ArticleService { * @param limit 查询数量 * @return 列表 */ - List
    listRecentArticle(Integer limit); + List
    listRecentArticle(Integer userId, Integer limit); /** diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/CommentService.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/CommentService.java index f66caae7..17613a83 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/CommentService.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/CommentService.java @@ -4,6 +4,7 @@ import com.liuyanzhao.ssm.blog.entity.Comment; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.List; @@ -47,14 +48,20 @@ public interface CommentService { */ PageInfo listCommentByPage( Integer pageIndex, - Integer pageSize); + Integer pageSize, + HashMap criteria); /** - * 获得评论列表 + * 获得某个用户收到的评论 * + * @param pageIndex 第几页开始 + * @param pageSize 一页显示数量 * @return 列表 */ - List listComment(); + PageInfo listReceiveCommentByPage( + Integer pageIndex, + Integer pageSize, + Integer userId); /** @@ -84,7 +91,7 @@ PageInfo listCommentByPage( * @param limit 查询数量 * @return 列表 */ - List listRecentComment(Integer limit); + List listRecentComment(Integer userId, Integer limit); /** * 获得评论的子评论 diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/ArticleServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/ArticleServiceImpl.java index ca3afe1d..c2750481 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/ArticleServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/ArticleServiceImpl.java @@ -3,11 +3,9 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.liuyanzhao.ssm.blog.enums.ArticleCommentStatus; +import com.liuyanzhao.ssm.blog.mapper.*; import com.liuyanzhao.ssm.blog.service.ArticleService; import com.liuyanzhao.ssm.blog.entity.*; -import com.liuyanzhao.ssm.blog.mapper.ArticleCategoryRefMapper; -import com.liuyanzhao.ssm.blog.mapper.ArticleMapper; -import com.liuyanzhao.ssm.blog.mapper.ArticleTagRefMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -37,6 +35,12 @@ public class ArticleServiceImpl implements ArticleService { @Autowired private ArticleTagRefMapper articleTagRefMapper; + @Autowired + private UserMapper userMapper; + + @Autowired + private CommentMapper commentMapper; + @Override public Integer countArticle(Integer status) { Integer count = 0; @@ -98,8 +102,8 @@ public List
    listArticle(HashMap criteria) { } @Override - public List
    listRecentArticle(Integer limit) { - return articleMapper.listArticleByLimit(limit); + public List
    listRecentArticle(Integer userId, Integer limit) { + return articleMapper.listArticleByLimit(userId, limit); } @Override @@ -140,10 +144,15 @@ public void deleteArticleBatch(List ids) { } @Override + @Transactional(rollbackFor = Exception.class) public void deleteArticle(Integer id) { articleMapper.deleteById(id); // 删除分类关联 articleCategoryRefMapper.deleteByArticleId(id); + // 删除标签管理 + articleTagRefMapper.deleteByArticleId(id); + // 删除评论 + commentMapper.deleteByArticleId(id); } @@ -161,6 +170,8 @@ public PageInfo
    pageArticle(Integer pageIndex, categoryList.add(Category.Default()); } articleList.get(i).setCategoryList(categoryList); + + articleList.get(i).setUser(userMapper.getUserById(articleList.get(i).getArticleUserId())); // //封装TagList // List tagList = articleTagRefMapper.listTagByArticleId(articleList.get(i).getArticleId()); // articleList.get(i).setTagList(tagList); diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CommentServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CommentServiceImpl.java index e2fb3bb4..20f9015d 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CommentServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/CommentServiceImpl.java @@ -13,6 +13,8 @@ import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -64,11 +66,11 @@ public Comment getCommentById(Integer id) { } @Override - public PageInfo listCommentByPage(Integer pageIndex, Integer pageSize) { + public PageInfo listCommentByPage(Integer pageIndex, Integer pageSize, HashMap criteria) { PageHelper.startPage(pageIndex, pageSize); List commentList = null; try { - commentList = commentMapper.listComment(); + commentList = commentMapper.listComment(criteria); for (int i = 0; i < commentList.size(); i++) { Article article = articleMapper.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), commentList.get(i).getCommentArticleId()); commentList.get(i).setArticle(article); @@ -81,15 +83,23 @@ public PageInfo listCommentByPage(Integer pageIndex, Integer pageSize) } @Override - public List listComment() { - List commentList = null; + public PageInfo listReceiveCommentByPage(Integer pageIndex, Integer pageSize, Integer userId) { + PageHelper.startPage(pageIndex, pageSize); + List commentList = new ArrayList<>(); try { - commentList = commentMapper.listComment(); + List articleIds = articleMapper.listArticleIdsByUserId(userId); + if (articleIds != null && articleIds.size() > 0) { + commentList = commentMapper.getReceiveComment(articleIds); + for (int i = 0; i < commentList.size(); i++) { + Article article = articleMapper.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), commentList.get(i).getCommentArticleId()); + commentList.get(i).setArticle(article); + } + } } catch (Exception e) { e.printStackTrace(); - log.error("获得评论列表失败:cause:{}", e); + log.error("分页获得评论失败,pageIndex:{}, pageSize:{}, cause:{}", pageIndex, pageSize, e); } - return commentList; + return new PageInfo<>(commentList); } @Override @@ -125,10 +135,10 @@ public Integer countComment() { } @Override - public List listRecentComment(Integer limit) { + public List listRecentComment(Integer userId, Integer limit) { List commentList = null; try { - commentList = commentMapper.listRecentComment(limit); + commentList = commentMapper.listRecentComment(userId, limit); for (int i = 0; i < commentList.size(); i++) { Article article = articleMapper.getArticleByStatusAndId(ArticleStatus.PUBLISH.getValue(), commentList.get(i).getCommentArticleId()); commentList.get(i).setArticle(article); diff --git a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java index 5fdb994e..5fe8e2f5 100755 --- a/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java +++ b/ForestBlog/src/main/java/com/liuyanzhao/ssm/blog/service/impl/UserServiceImpl.java @@ -1,11 +1,14 @@ package com.liuyanzhao.ssm.blog.service.impl; import com.liuyanzhao.ssm.blog.mapper.ArticleMapper; +import com.liuyanzhao.ssm.blog.mapper.CommentMapper; import com.liuyanzhao.ssm.blog.mapper.UserMapper; import com.liuyanzhao.ssm.blog.entity.User; +import com.liuyanzhao.ssm.blog.service.ArticleService; import com.liuyanzhao.ssm.blog.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @@ -25,6 +28,11 @@ public class UserServiceImpl implements UserService { @Autowired private ArticleMapper articleMapper; + @Autowired + private ArticleService articleService; + @Autowired + private CommentMapper commentMapper; + @Override public List listUser() { List userList = userMapper.listUser(); @@ -46,8 +54,19 @@ public void updateUser(User user) { } @Override + @Transactional(rollbackFor = Exception.class) public void deleteUser(Integer id) { + // 删除用户 userMapper.deleteById(id); + // 删除评论 + commentMapper.deleteByUserId(id); + // 删除文章 + List articleIds = articleMapper.listArticleIdsByUserId(id); + if (articleIds != null && articleIds.size() > 0) { + for (Integer articleId : articleIds) { + articleService.deleteArticle(articleId); + } + } } @Override diff --git a/ForestBlog/src/main/resources/db.properties b/ForestBlog/src/main/resources/db.properties index 8e005222..cec7879c 100755 --- a/ForestBlog/src/main/resources/db.properties +++ b/ForestBlog/src/main/resources/db.properties @@ -1,5 +1,5 @@ #MySQL mysql.driver=com.mysql.cj.jdbc.Driver -mysql.url=jdbc:mysql://127.0.0.1:3306/forest_blog?useUnicode=true&characterEncoding=utf8 +mysql.url=jdbc:mysql://127.0.0.1:3306/forest_blog?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC mysql.username=root mysql.password=123456 diff --git a/ForestBlog/src/main/resources/mapper/ArticleMapper.xml b/ForestBlog/src/main/resources/mapper/ArticleMapper.xml index df5ed01b..f80c73cf 100644 --- a/ForestBlog/src/main/resources/mapper/ArticleMapper.xml +++ b/ForestBlog/src/main/resources/mapper/ArticleMapper.xml @@ -82,6 +82,10 @@ + + DELETE FROM + WHERE article_user_id = #{userId} + @@ -321,7 +325,21 @@ article_update_time, article_is_comment, article_status, article_order FROM + + + article_user_id = #{userId} + + ORDER BY article_id DESC - LIMIT #{value} + LIMIT #{limit} + + + diff --git a/ForestBlog/src/main/resources/mapper/CommentMapper.xml b/ForestBlog/src/main/resources/mapper/CommentMapper.xml index 9d9d0382..266d4d17 100755 --- a/ForestBlog/src/main/resources/mapper/CommentMapper.xml +++ b/ForestBlog/src/main/resources/mapper/CommentMapper.xml @@ -15,6 +15,7 @@ + comment @@ -22,7 +23,7 @@ comment_id, comment_pid, comment_pname, comment_article_id, comment_author_name, comment_author_email, comment_author_url, comment_author_avatar, comment_content, comment_agent, - comment_ip,comment_create_time, comment_role + comment_ip,comment_create_time, comment_role,comment_user_id + + @@ -107,7 +141,11 @@ FROM - WHERE comment_role = 0 + + + comment_user_id = #{userId} + + ORDER BY comment_id DESC LIMIT #{limit} diff --git a/ForestBlog/src/main/resources/mapper/UserMapper.xml b/ForestBlog/src/main/resources/mapper/UserMapper.xml index 07c53bf3..aab46d88 100755 --- a/ForestBlog/src/main/resources/mapper/UserMapper.xml +++ b/ForestBlog/src/main/resources/mapper/UserMapper.xml @@ -13,13 +13,14 @@ + user user_id, user_name, user_pass, user_nickname, user_email, user_url, user_avatar, - user_last_login_ip, user_register_time, user_last_login_time, user_status + user_last_login_ip, user_register_time, user_last_login_time, user_status, user_role + @@ -45,6 +46,7 @@ + @@ -56,6 +58,9 @@ +
    用户 标题 所属分类 状态
    + ${a.user.userNickname} + diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Comment/index.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Comment/index.jsp index 6a4c3834..f4044978 100755 --- a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Comment/index.jsp +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Comment/index.jsp @@ -67,9 +67,13 @@ 回复 - | - 编辑 - + + + | + 编辑 + + + | 删除 diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Comment/reply.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Comment/reply.jsp index fead6121..11f84bde 100755 --- a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Comment/reply.jsp +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Comment/reply.jsp @@ -35,7 +35,6 @@ -
    @@ -44,24 +43,6 @@
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Public/framework.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Public/framework.jsp index 2fbe88b5..0ac292d5 100755 --- a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Public/framework.jsp +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/Public/framework.jsp @@ -48,7 +48,7 @@ ${sessionScope.user.userName}
    -
    基本资料
    +
    基本资料
  • @@ -60,7 +60,9 @@
    -
    @@ -120,7 +149,7 @@
  • diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/editProfile.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/editProfile.jsp new file mode 100755 index 00000000..952a4072 --- /dev/null +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/editProfile.jsp @@ -0,0 +1,147 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="rapid" uri="http://www.rapid-framework.org.cn/rapid" %> + + + - 编辑个人信息 + + + + + + + +
    + + 首页 + 个人信息 + 编辑用户信息 + +
    +

    +
    + +
    + +
    +
    +
    + +

    +
    + + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    + +
    + checked> + checked> +
    +
    +
    +
    + + +
    +
    +
    + + +
    + + + + + +<%@ include file="../Public/framework.jsp" %> diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/profile.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/profile.jsp index 3c870f57..828d9a74 100755 --- a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/profile.jsp +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/User/profile.jsp @@ -43,11 +43,10 @@

    -
    -
    - 编辑 + 编辑
    diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/login.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/login.jsp index c4071521..529c3dc6 100755 --- a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/login.jsp +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/login.jsp @@ -105,8 +105,7 @@ wp_attempt_focus(); if(typeof wpOnload=='function')wpOnload(); - -

    ← 返回到风吟博客

    +

    ← 返回到风吟博客 | 注册

    diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Admin/register.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/register.jsp new file mode 100755 index 00000000..7a6a2c9a --- /dev/null +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Admin/register.jsp @@ -0,0 +1,165 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8" %> + + + + + + + + + + ${options.optionSiteTitle} ‹ 注册 + + + + + + + + + + + + + +
    +

    ${options.optionSiteTitle}

    + <% + String username = ""; + String password = ""; + //获取当前站点的所有Cookie + Cookie[] cookies = request.getCookies(); + for (int i = 0; i < cookies.length; i++) {//对cookies中的数据进行遍历,找到用户名、密码的数据 + if ("username".equals(cookies[i].getName())) { + username = cookies[i].getValue(); + } else if ("password".equals(cookies[i].getName())) { + password = cookies[i].getValue(); + } + } + %> + +

    + +

    +

    + +

    +

    + +

    +

    + +

    +

    + +

    +

    + +

    + + +

    ← 返回到风吟博客 | 登录

    + +
    + + +
    + + + + + + diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Home/Error/403.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Home/Error/403.jsp new file mode 100755 index 00000000..0a34cc0e --- /dev/null +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Home/Error/403.jsp @@ -0,0 +1,62 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8" %> + + + + + + 403 没有权限操作 + + + +
    +
    +
    +

    + 404很抱歉,您没有权限操作! +

    +
    +
    +

    可能原因:

    +
      +
    1. 访问了其他用户的数据
    2. +
    3. 系统异常
    4. +
    5. 输入的网址不正确
    6. +
    +
    +
    +

    可以尝试:

    +
      +
    1. 返回首页
    2. +
    3. 留言反馈
    4. +
    5. + 联系站长 +
    6. +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Home/Page/articleDetail.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Home/Page/articleDetail.jsp index 1656618f..a1b48e71 100755 --- a/ForestBlog/src/main/webapp/WEB-INF/view/Home/Page/articleDetail.jsp +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Home/Page/articleDetail.jsp @@ -298,21 +298,18 @@ 取消回复 + + 您未登录,登录后才能评论,前往登录 + +
    - 言曌 登录者:${sessionScope.user.userNickname}
    登出 - - - -

    @@ -321,28 +318,6 @@

    - - -

    - - -

    - -

    - - -

    -

    @@ -384,7 +359,7 @@   - + 删除 - $(document).ready(function () { - if ($('#author_name').val() == '') { - var author = localStorage.getItem("author"); - $("#author_name").val(author == 'undefined' ? '' : author); - } - if ($('#author_email').val() == '') { - var email = localStorage.getItem("email"); - $("#author_email").val(email == 'undefined' ? '' : email); - } - if ($('#author_url').val() == '') { - var url = localStorage.getItem("url"); - $("#author_url").val(url == 'undefined' ? '' : url); - } - }); var articleId = $("#articleDetail").attr("data-id"); increaseViewCount(articleId); diff --git a/ForestBlog/src/main/webapp/WEB-INF/view/Home/Public/part/header.jsp b/ForestBlog/src/main/webapp/WEB-INF/view/Home/Public/part/header.jsp index be62a920..f4be5852 100755 --- a/ForestBlog/src/main/webapp/WEB-INF/view/Home/Public/part/header.jsp +++ b/ForestBlog/src/main/webapp/WEB-INF/view/Home/Public/part/header.jsp @@ -13,13 +13,13 @@