diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..2959201
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,3 @@
+*.js linguist-language=java
+*.css linguist-language=java
+*.html linguist-language=java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..67a1035
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,31 @@
+*.js linguist-language=java
+*.css linguist-language=java
+*.html linguist-language=java
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+.mvn
+mvnw
+mvnw.cmd
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
diff --git a/README.md b/README.md
index 9afd123..3dc386e 100644
--- a/README.md
+++ b/README.md
@@ -27,28 +27,29 @@ Kyrie Blog是由SpringBoot1.5 + MyBatis + Thymeleaf等技术实现的个人网
### 预览效果
#### 前端效果
-
+
-
+
-
+
-
+
-
+
#### 后端效果
-
-
+
-
+
-
+
-
+
-
+
+
+
### 安装
下载源码,执行sql文件,然后修改application-dev.yml文件中连接数据库的用户名、密码。运行项目即可。
@@ -57,5 +58,10 @@ Kyrie Blog是由SpringBoot1.5 + MyBatis + Thymeleaf等技术实现的个人网
后台访问地址:http://localhost:8888/admin 用户名:admin 密码:123456
-### 更新日志
-2018-08-04发布第一个版本
+### 交流群
+#### 欢迎加入:1103081979
+
+
+### 如果此博客能帮助到你,请作者喝杯咖啡吧或者建设演示服务器
+
+
diff --git a/mvnw b/mvnw
deleted file mode 100644
index 5bf251c..0000000
--- a/mvnw
+++ /dev/null
@@ -1,225 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-# JAVA_HOME - location of a JDK home dir
-#
-# Optional ENV vars
-# -----------------
-# M2_HOME - location of maven2's installed home dir
-# MAVEN_OPTS - parameters passed to the Java VM when running Maven
-# e.g. to debug Maven itself, use
-# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
-
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
- if [ -f /etc/mavenrc ] ; then
- . /etc/mavenrc
- fi
-
- if [ -f "$HOME/.mavenrc" ] ; then
- . "$HOME/.mavenrc"
- fi
-
-fi
-
-# OS specific support. $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
- CYGWIN*) cygwin=true ;;
- MINGW*) mingw=true;;
- Darwin*) darwin=true
- # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
- # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
- if [ -z "$JAVA_HOME" ]; then
- if [ -x "/usr/libexec/java_home" ]; then
- export JAVA_HOME="`/usr/libexec/java_home`"
- else
- export JAVA_HOME="/Library/Java/Home"
- fi
- fi
- ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
- if [ -r /etc/gentoo-release ] ; then
- JAVA_HOME=`java-config --jre-home`
- fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
- ## resolve links - $0 may be a link to maven's home
- PRG="$0"
-
- # need this for relative symlinks
- while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG="`dirname "$PRG"`/$link"
- fi
- done
-
- saveddir=`pwd`
-
- M2_HOME=`dirname "$PRG"`/..
-
- # make it fully qualified
- M2_HOME=`cd "$M2_HOME" && pwd`
-
- cd "$saveddir"
- # echo Using m2 at $M2_HOME
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --unix "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# For Migwn, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME="`(cd "$M2_HOME"; pwd)`"
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
- # TODO classpath?
-fi
-
-if [ -z "$JAVA_HOME" ]; then
- javaExecutable="`which javac`"
- if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
- # readlink(1) is not available as standard on Solaris 10.
- readLink=`which readlink`
- if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
- if $darwin ; then
- javaHome="`dirname \"$javaExecutable\"`"
- javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
- else
- javaExecutable="`readlink -f \"$javaExecutable\"`"
- fi
- javaHome="`dirname \"$javaExecutable\"`"
- javaHome=`expr "$javaHome" : '\(.*\)/bin'`
- JAVA_HOME="$javaHome"
- export JAVA_HOME
- fi
- fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
- if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- else
- JAVACMD="`which java`"
- fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
- echo "Error: JAVA_HOME is not defined correctly." >&2
- echo " We cannot execute $JAVACMD" >&2
- exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
- echo "Warning: JAVA_HOME environment variable is not set."
-fi
-
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
-
- if [ -z "$1" ]
- then
- echo "Path not specified to find_maven_basedir"
- return 1
- fi
-
- basedir="$1"
- wdir="$1"
- while [ "$wdir" != '/' ] ; do
- if [ -d "$wdir"/.mvn ] ; then
- basedir=$wdir
- break
- fi
- # workaround for JBEAP-8937 (on Solaris 10/Sparc)
- if [ -d "${wdir}" ]; then
- wdir=`cd "$wdir/.."; pwd`
- fi
- # end of workaround
- done
- echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
- if [ -f "$1" ]; then
- echo "$(tr -s '\n' ' ' < "$1")"
- fi
-}
-
-BASE_DIR=`find_maven_basedir "$(pwd)"`
-if [ -z "$BASE_DIR" ]; then
- exit 1;
-fi
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
-echo $MAVEN_PROJECTBASEDIR
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --path --windows "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
- [ -n "$MAVEN_PROJECTBASEDIR" ] &&
- MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
-fi
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-exec "$JAVACMD" \
- $MAVEN_OPTS \
- -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
- "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
- ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
deleted file mode 100644
index 019bd74..0000000
--- a/mvnw.cmd
+++ /dev/null
@@ -1,143 +0,0 @@
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements. See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership. The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License. You may obtain a copy of the License at
-@REM
-@REM http://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied. See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Maven2 Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
-@REM
-@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-@REM ----------------------------------------------------------------------------
-
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-
-set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
diff --git a/my-blog.iml b/my-blog.iml
deleted file mode 100644
index b075638..0000000
--- a/my-blog.iml
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e13c25a..4420f6f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,18 +4,17 @@
4.0.0
com.wip
- my-blog
- 0.0.1-SNAPSHOT
+ springboot-blog
+ 1.0.0-SNAPSHOT
jar
- my-blog
- Demo project for Spring Boot
+ springboot-blog
+ Spring Boot Blog
org.springframework.boot
spring-boot-starter-parent
1.5.14.RELEASE
-
@@ -50,12 +49,6 @@
spring-boot-starter-aop
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
org.springframework.boot
@@ -73,24 +66,6 @@
commons-lang3
3.4
-
-
- com.fasterxml.jackson.core
- jackson-core
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-joda
-
-
- com.fasterxml.jackson.module
- jackson-module-parameter-names
-
-
com.github.pagehelper
@@ -129,19 +104,6 @@
1.9.22
-
-
- com.qcloud
- cos_api
- 5.2.4
-
-
-
- com.google.code.gson
- gson
- 2.8.0
-
-
com.atlassian.commonmark
@@ -162,13 +124,6 @@
7.2.11
-
-
-
-
-
-
-
javax.servlet
javax.servlet-api
@@ -197,9 +152,5 @@
-
- blog
-
-
diff --git a/src/main/java/com/wip/MyBlogApplication.java b/src/main/java/com/wip/MyBlogApplication.java
index 9913371..1a0efe7 100644
--- a/src/main/java/com/wip/MyBlogApplication.java
+++ b/src/main/java/com/wip/MyBlogApplication.java
@@ -3,7 +3,6 @@
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@MapperScan("com.wip.dao")
diff --git a/src/main/java/com/wip/api/QiNiuCloudService.java b/src/main/java/com/wip/api/QiNiuCloudService.java
index 5552864..ec4d6c2 100644
--- a/src/main/java/com/wip/api/QiNiuCloudService.java
+++ b/src/main/java/com/wip/api/QiNiuCloudService.java
@@ -13,6 +13,8 @@
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@@ -22,6 +24,10 @@
*/
public class QiNiuCloudService {
+ private QiNiuCloudService(){}
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(QiNiuCloudService.class);
+
/**
* 密钥凭证
*/
@@ -44,7 +50,6 @@ public class QiNiuCloudService {
* @return
*/
public static String upload(MultipartFile file, String fileName) {
-
// 构造一个带指定Zone对象的配置类
// 华东 Zone.zone0()
// 华北 Zone.zone1()
@@ -53,30 +58,27 @@ public static String upload(MultipartFile file, String fileName) {
Configuration cfg = new Configuration(Zone.zone2());
// 其它参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
-
// 默认不指定key的情况下,以文件内容的hash值作为文件名
- String key = null;
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
String upToken = auth.uploadToken(BUCKET);
try {
Response response = null;
response = uploadManager.put(file.getInputStream(), fileName, upToken,null,null);
-
// 解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(),DefaultPutRet.class);
- System.out.println(putRet.key);
- System.out.println(putRet.hash);
+ LOGGER.info(putRet.key);
+ LOGGER.info(putRet.hash);
return putRet.key;
} catch (QiniuException ex) {
Response r = ex.response;
- System.out.println(r.toString());
+ LOGGER.error(r.toString());
try {
- System.out.println(r.bodyString());
+ LOGGER.error(r.bodyString());
} catch (QiniuException ex2) {
-
+ LOGGER.error(ex2.error());
}
} catch (IOException e) {
- e.printStackTrace();
+ LOGGER.error(e.getMessage());
}
return null;
}
diff --git a/src/main/java/com/wip/constant/Types.java b/src/main/java/com/wip/constant/Types.java
index 85d13a3..3ac94c5 100644
--- a/src/main/java/com/wip/constant/Types.java
+++ b/src/main/java/com/wip/constant/Types.java
@@ -1,7 +1,5 @@
package com.wip.constant;
-import com.wip.model.ContentDomain;
-
/**
* Created by IntelliJ IDEA.
* User: Kyrie
diff --git a/src/main/java/com/wip/constant/WebConst.java b/src/main/java/com/wip/constant/WebConst.java
index 02d3762..84b9fb9 100644
--- a/src/main/java/com/wip/constant/WebConst.java
+++ b/src/main/java/com/wip/constant/WebConst.java
@@ -11,6 +11,8 @@
@Component
public class WebConst {
+ private WebConst() {}
+
/**
* 一些网站配置
diff --git a/src/main/java/com/wip/controller/BaseController.java b/src/main/java/com/wip/controller/BaseController.java
index dd6e7ff..f4b96d4 100644
--- a/src/main/java/com/wip/controller/BaseController.java
+++ b/src/main/java/com/wip/controller/BaseController.java
@@ -42,15 +42,10 @@ public Integer getUid(HttpServletRequest request) {
* @return String
*/
public String join(String[] arr) {
- StringBuffer buffer = new StringBuffer();
- String[] temp = arr;
- int length = arr.length;
-
- for (int i = 0; i < length; i++) {
- String item = temp[i];
+ StringBuilder buffer = new StringBuilder();
+ for (String item : arr) {
buffer.append(",").append(item);
}
-
return buffer.length() > 0 ? buffer.substring(1) : buffer.toString();
}
diff --git a/src/main/java/com/wip/controller/HomeController.java b/src/main/java/com/wip/controller/HomeController.java
index cc4bc38..680d97c 100644
--- a/src/main/java/com/wip/controller/HomeController.java
+++ b/src/main/java/com/wip/controller/HomeController.java
@@ -6,9 +6,7 @@
import com.wip.constant.Types;
import com.wip.constant.WebConst;
import com.wip.dto.MetaDto;
-import com.wip.dto.StatisticsDto;
import com.wip.dto.cond.ContentCond;
-import com.wip.dto.cond.MetaCond;
import com.wip.exception.BusinessException;
import com.wip.model.CommentDomain;
import com.wip.model.ContentDomain;
@@ -16,7 +14,6 @@
import com.wip.service.article.ContentService;
import com.wip.service.comment.CommentService;
import com.wip.service.meta.MetaService;
-import com.wip.service.site.SiteService;
import com.wip.utils.APIResponse;
import com.wip.utils.IPKit;
import com.wip.utils.TaleUtils;
@@ -31,7 +28,6 @@
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
import java.net.URLEncoder;
import java.util.List;
@@ -194,15 +190,15 @@ public APIResponse comment(HttpServletRequest request, HttpServletResponse respo
@RequestParam(name = "email", required = false) String email,
@RequestParam(name = "url", required = false) String url,
@RequestParam(name = "content", required = true) String content,
- @RequestParam(name = "csrf_token", required = true) String csrf_token
+ @RequestParam(name = "csrf_token", required = true) String csrfToken
) {
String ref = request.getHeader("Referer");
- if (StringUtils.isBlank(ref) || StringUtils.isBlank(csrf_token)){
+ if (StringUtils.isBlank(ref) || StringUtils.isBlank(csrfToken)){
return APIResponse.fail("访问失败");
}
- String token = cache.hget(Types.CSRF_TOKEN.getType(), csrf_token);
+ String token = cache.hget(Types.CSRF_TOKEN.getType(), csrfToken);
if (StringUtils.isBlank(token)) {
return APIResponse.fail("访问失败");
}
diff --git a/src/main/java/com/wip/controller/admin/ArticleController.java b/src/main/java/com/wip/controller/admin/ArticleController.java
index ab13694..2c274c3 100644
--- a/src/main/java/com/wip/controller/admin/ArticleController.java
+++ b/src/main/java/com/wip/controller/admin/ArticleController.java
@@ -15,12 +15,9 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
-
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@@ -29,8 +26,6 @@
@RequestMapping("/admin/article")
public class ArticleController extends BaseController {
- private static final Logger LOGGER = LoggerFactory.getLogger(ArticleController.class);
-
@Autowired
private MetaService metaService;
@@ -130,7 +125,7 @@ public APIResponse modifyArticle(
contentDomain.setStatus(status);
contentDomain.setTags(tags);
contentDomain.setCategories(categories);
- contentDomain.setAllowComment(allowComment ? 1: 0);
+ contentDomain.setAllowComment(Boolean.TRUE.equals(allowComment) ? 1: 0);
contentService.updateArticleById(contentDomain);
return APIResponse.success();
@@ -181,7 +176,7 @@ public APIResponse publishArticle(
// 只允许博客文章有分类,防止作品被收入分类
contentDomain.setTags(type.equals(Types.ARTICLE.getType()) ? tags : null);
contentDomain.setCategories(type.equals(Types.ARTICLE.getType()) ? categories : null);
- contentDomain.setAllowComment(allowComment ? 1 : 0);
+ contentDomain.setAllowComment(Boolean.TRUE.equals(allowComment) ? 1 : 0);
// 添加文章
contentService.addArticle(contentDomain);
diff --git a/src/main/java/com/wip/controller/admin/AttachController.java b/src/main/java/com/wip/controller/admin/AttachController.java
index 9f70a63..5d58d85 100644
--- a/src/main/java/com/wip/controller/admin/AttachController.java
+++ b/src/main/java/com/wip/controller/admin/AttachController.java
@@ -19,13 +19,10 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@@ -36,8 +33,6 @@
@RequestMapping("admin/attach")
public class AttachController extends BaseController {
- private static final Logger LOGGER = LoggerFactory.getLogger(AttachController.class);
-
public static final String CLASSPATH = TaleUtils.getUploadFilePath();
@Autowired
diff --git a/src/main/java/com/wip/controller/admin/AuthController.java b/src/main/java/com/wip/controller/admin/AuthController.java
index cb4dbe6..40a095f 100644
--- a/src/main/java/com/wip/controller/admin/AuthController.java
+++ b/src/main/java/com/wip/controller/admin/AuthController.java
@@ -8,7 +8,6 @@
import com.wip.service.log.LogService;
import com.wip.service.user.UserService;
import com.wip.utils.APIResponse;
-import com.wip.utils.GsonUtils;
import com.wip.utils.TaleUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -61,29 +60,29 @@ public APIResponse toLogin(
String password,
@ApiParam(name = "remember_me", value = "记住我", required = false)
@RequestParam(name = "remember_me", required = false)
- String remember_me
+ String rememberMe
) {
- Integer error_count = cache.get("login_error_count");
+ Integer errorCount = cache.get("login_error_count");
try {
// 调用Service登录方法
UserDomain userInfo = userService.login(username, password);
// 设置用户信息session
request.getSession().setAttribute(WebConst.LOGIN_SESSION_KEY, userInfo);
// 判断是否勾选记住我
- if (StringUtils.isNotBlank(remember_me)) {
+ if (StringUtils.isNotBlank(rememberMe)) {
TaleUtils.setCookie(response, userInfo.getUid());
}
// 写入日志
logService.addLog(LogActions.LOGIN.getAction(), userInfo.getUsername()+"用户", request.getRemoteAddr(), userInfo.getUid());
} catch (Exception e) {
LOGGER.error(e.getMessage());
- error_count = null == error_count ? 1 : error_count + 1;
- if (error_count > 3) {
+ errorCount = null == errorCount ? 1 : errorCount + 1;
+ if (errorCount > 3) {
return APIResponse.fail("您输入密码已经错误超过3次,请10分钟后尝试");
}
- System.out.println(error_count);
+ LOGGER.error(String.valueOf(errorCount));
// 设置缓存为10分钟
- cache.set("login_error_count", error_count, 10 * 60);
+ cache.set("login_error_count", errorCount, 10L * 60);
String msg = "登录失败";
if (e instanceof BusinessException) {
msg = e.getMessage();
@@ -114,7 +113,4 @@ public void logout(HttpSession session, HttpServletRequest request, HttpServletR
LOGGER.error("注销失败",e);
}
}
-
-
-
}
diff --git a/src/main/java/com/wip/controller/admin/CategoryController.java b/src/main/java/com/wip/controller/admin/CategoryController.java
index 31e7d38..04da40f 100644
--- a/src/main/java/com/wip/controller/admin/CategoryController.java
+++ b/src/main/java/com/wip/controller/admin/CategoryController.java
@@ -78,7 +78,6 @@ public APIResponse deleteCategory(
try {
metaService.deleteMetaById(mid);
} catch (Exception e) {
- e.printStackTrace();
LOGGER.error(e.getMessage());
return APIResponse.fail(e.getMessage());
}
diff --git a/src/main/java/com/wip/controller/admin/CommentController.java b/src/main/java/com/wip/controller/admin/CommentController.java
index 128905d..5be91c5 100644
--- a/src/main/java/com/wip/controller/admin/CommentController.java
+++ b/src/main/java/com/wip/controller/admin/CommentController.java
@@ -4,7 +4,6 @@
import com.wip.controller.BaseController;
import com.wip.dto.cond.CommentCond;
import com.wip.model.CommentDomain;
-import com.wip.model.UserDomain;
import com.wip.service.comment.CommentService;
import com.wip.utils.APIResponse;
import io.swagger.annotations.Api;
@@ -15,8 +14,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@Api("评论相关接口")
@@ -41,7 +38,6 @@ public String index(
HttpServletRequest request
) {
- UserDomain user = this.user(request);
PageInfo comments = commentService.getCommentsByCond(new CommentCond(), page, limit);
request.setAttribute("comments", comments);
return "admin/comment_list";
@@ -73,5 +69,27 @@ public APIResponse changeStatus(
}
return APIResponse.success();
}
-
+ @ApiOperation("删除评论")
+ @PostMapping(value = "/delete")
+ @ResponseBody
+ public APIResponse deleteStatus(
+ HttpServletRequest request,
+ @ApiParam(name = "coid", value = "评论主键", required = true)
+ @RequestParam(name = "coid", required = true)
+ Integer coid
+ ) {
+ try {
+ CommentDomain comment = commentService.getCommentById(coid);
+ if (null != comment) {
+ commentService.deleteComment(coid);
+ } else {
+ return APIResponse.fail("通过失败");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ LOGGER.error(e.getMessage());
+ return APIResponse.fail(e.getMessage());
+ }
+ return APIResponse.success();
+ }
}
diff --git a/src/main/java/com/wip/controller/admin/LinksController.java b/src/main/java/com/wip/controller/admin/LinksController.java
index 41fc5c1..91e7e60 100644
--- a/src/main/java/com/wip/controller/admin/LinksController.java
+++ b/src/main/java/com/wip/controller/admin/LinksController.java
@@ -76,7 +76,7 @@ public APIResponse addLink(
}
} catch (Exception e) {
- e.printStackTrace();
+ LOGGER.error(e.getMessage());
throw BusinessException.withErrorCode(ErrorConstant.Meta.ADD_META_FAIL);
}
@@ -94,7 +94,7 @@ public APIResponse deleteLink(
try {
metaService.deleteMetaById(mid);
} catch (Exception e) {
- e.printStackTrace();
+ LOGGER.error(e.getMessage());
throw BusinessException.withErrorCode(ErrorConstant.Meta.DELETE_META_FAIL);
}
diff --git a/src/main/java/com/wip/controller/admin/SettingController.java b/src/main/java/com/wip/controller/admin/SettingController.java
index 9303d61..06ed6bd 100644
--- a/src/main/java/com/wip/controller/admin/SettingController.java
+++ b/src/main/java/com/wip/controller/admin/SettingController.java
@@ -43,9 +43,7 @@ public class SettingController extends BaseController {
public String index(HttpServletRequest request) {
List optionsList = optionService.getOptions();
Map options = new HashMap<>();
- optionsList.forEach((option) ->{
- options.put(option.getName(),option.getValue());
- });
+ optionsList.forEach(option -> options.put(option.getName(),option.getValue()));
request.setAttribute("options", options);
return "admin/setting";
}
@@ -54,25 +52,19 @@ public String index(HttpServletRequest request) {
@PostMapping(value = "")
@ResponseBody
public APIResponse saveSetting(HttpServletRequest request) {
-
try {
Map parameterMap = request.getParameterMap();
Map querys = new HashMap<>();
- parameterMap.forEach((key, value) -> {
- //System.out.println(key + "------" + join(value));
- querys.put(key, join(value));
- });
-
+ parameterMap.forEach((key, value) -> querys.put(key, join(value)));
optionService.saveOptions(querys);
WebConst.initConfig = querys;
-
// 写入日志
logService.addLog(LogActions.SYS_SETTING.getAction(),GsonUtils.toJsonString(querys),request.getRemoteAddr(),this.getUid(request));
return APIResponse.success();
-
} catch (Exception e) {
String msg = "保存设置失败";
- return APIResponse.fail(e.getMessage());
+ LOGGER.error(e.getMessage());
+ return APIResponse.fail(msg);
}
}
diff --git a/src/main/java/com/wip/exception/BusinessException.java b/src/main/java/com/wip/exception/BusinessException.java
index cf1ec04..30e2537 100644
--- a/src/main/java/com/wip/exception/BusinessException.java
+++ b/src/main/java/com/wip/exception/BusinessException.java
@@ -48,7 +48,7 @@ public String getErrorCode() {
}
public String[] getErrorMessageArguments() {
- return this.errorMessageArguments = errorMessageArguments;
+ return errorMessageArguments;
}
public BusinessException withErrorMessageArguments(String... errorMessageArguments) {
diff --git a/src/main/java/com/wip/interceptor/BaseInterceptor.java b/src/main/java/com/wip/interceptor/BaseInterceptor.java
index b098aad..71bcc73 100644
--- a/src/main/java/com/wip/interceptor/BaseInterceptor.java
+++ b/src/main/java/com/wip/interceptor/BaseInterceptor.java
@@ -90,10 +90,10 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
// 设置GET请求的token
if (request.getMethod().equals("GET")) {
- String csrf_token = UUID.UU64();
+ String csrfToken = UUID.UU64();
// 默认存储30分钟
- cache.hset(Types.CSRF_TOKEN.getType(), csrf_token, uri,30 * 60);
- request.setAttribute("_csrf_token", csrf_token);
+ cache.hset(Types.CSRF_TOKEN.getType(), csrfToken, uri,30L * 60);
+ request.setAttribute("_csrf_token", csrfToken);
}
// 返回true才会执行postHandle
return true;
@@ -118,22 +118,20 @@ public void postHandle(HttpServletRequest request, HttpServletResponse response,
request.setAttribute("commons", commons);
request.setAttribute("option", ov);
request.setAttribute("adminCommons", adminCommons);
- initSiteConfig(request);
+ initSiteConfig();
}
- private void initSiteConfig(HttpServletRequest request) {
+ private void initSiteConfig() {
if (WebConst.initConfig.isEmpty()) {
List options = optionService.getOptions();
Map querys = new HashMap<>();
- options.forEach(option -> {
- querys.put(option.getName(),option.getValue());
- });
+ options.forEach(option -> querys.put(option.getName(),option.getValue()));
WebConst.initConfig = querys;
}
}
@Override
- public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
+ public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
}
}
diff --git a/src/main/java/com/wip/interceptor/WebMvcConfig.java b/src/main/java/com/wip/interceptor/WebMvcConfig.java
index 92c220c..6f9fb5c 100644
--- a/src/main/java/com/wip/interceptor/WebMvcConfig.java
+++ b/src/main/java/com/wip/interceptor/WebMvcConfig.java
@@ -1,10 +1,8 @@
package com.wip.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
diff --git a/src/main/java/com/wip/service/article/impl/ContentServiceImpl.java b/src/main/java/com/wip/service/article/impl/ContentServiceImpl.java
index c1843c2..49bd6e0 100644
--- a/src/main/java/com/wip/service/article/impl/ContentServiceImpl.java
+++ b/src/main/java/com/wip/service/article/impl/ContentServiceImpl.java
@@ -21,12 +21,14 @@
import com.wip.model.RelationShipDomain;
import com.wip.service.article.ContentService;
import com.wip.service.meta.MetaService;
+import java.util.Collections;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
import java.util.List;
@@ -111,8 +113,7 @@ public PageInfo getArticlesByCond(ContentCond contentCond, int pa
throw BusinessException.withErrorCode(ErrorConstant.Common.PARAM_IS_EMPTY);
PageHelper.startPage(pageNum,pageSize);
List contents = contentDao.getArticleByCond(contentCond);
- PageInfo pageInfo = new PageInfo<>(contents);
- return pageInfo;
+ return new PageInfo<>(contents);
}
@Override
@@ -126,15 +127,13 @@ public void deleteArticleById(Integer cid) {
// 同时要删除该 文章下的所有评论
List comments = commentDao.getCommentByCId(cid);
- if (null != comments && comments.size() > 0) {
- comments.forEach(comment -> {
- commentDao.deleteComment(comment.getCoid());
- });
+ if (null != comments && !comments.isEmpty()) {
+ comments.forEach(comment -> commentDao.deleteComment(comment.getCoid()));
}
// 删除标签和分类关联
List relationShips = relationShipDao.getRelationShipByCid(cid);
- if (null != relationShips && relationShips.size() > 0) {
+ if (!CollectionUtils.isEmpty(relationShips)) {
relationShipDao.deleteRelationShipByCid(cid);
}
@@ -163,9 +162,9 @@ public List getArticleByTags(MetaDomain tags) {
if (null == tags)
throw BusinessException.withErrorCode(ErrorConstant.Common.PARAM_IS_EMPTY);
List relationShip = relationShipDao.getRelationShipByMid(tags.getMid());
- if (null != relationShip && relationShip.size() > 0) {
+ if (!CollectionUtils.isEmpty(relationShip)) {
return contentDao.getArticleByTags(relationShip);
}
- return null;
+ return Collections.emptyList();
}
}
diff --git a/src/main/java/com/wip/service/attach/impl/AttAchServiceImpl.java b/src/main/java/com/wip/service/attach/impl/AttAchServiceImpl.java
index c6cf74c..1575646 100644
--- a/src/main/java/com/wip/service/attach/impl/AttAchServiceImpl.java
+++ b/src/main/java/com/wip/service/attach/impl/AttAchServiceImpl.java
@@ -42,8 +42,7 @@ public void addAttAch(AttAchDomain attAchDomain) {
public PageInfo getAtts(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List atts = attAchDao.getAtts();
- PageInfo pageInfo = new PageInfo<>(atts);
- return pageInfo;
+ return new PageInfo<>(atts);
}
@Override
diff --git a/src/main/java/com/wip/service/comment/CommentService.java b/src/main/java/com/wip/service/comment/CommentService.java
index a999a87..5611b67 100644
--- a/src/main/java/com/wip/service/comment/CommentService.java
+++ b/src/main/java/com/wip/service/comment/CommentService.java
@@ -51,4 +51,11 @@ public interface CommentService {
* @param status
*/
void updateCommentStatus(Integer coid, String status);
+
+ /**
+ * 删除评论
+ * @param id
+ */
+ void deleteComment(Integer id);
+
}
diff --git a/src/main/java/com/wip/service/comment/impl/CommentServiceImpl.java b/src/main/java/com/wip/service/comment/impl/CommentServiceImpl.java
index 11ab086..0c4003d 100644
--- a/src/main/java/com/wip/service/comment/impl/CommentServiceImpl.java
+++ b/src/main/java/com/wip/service/comment/impl/CommentServiceImpl.java
@@ -63,7 +63,9 @@ public void addComment(CommentDomain comments) {
if (null == comments) {
msg = "评论对象为空";
}
-
+ if (comments == null) {
+ throw BusinessException.withErrorCode("评论不能为空");
+ }
if (StringUtils.isBlank(comments.getAuthor())) {
comments.setAuthor("热心网友");
}
@@ -118,8 +120,7 @@ public PageInfo getCommentsByCond(CommentCond commentCond, int pa
throw BusinessException.withErrorCode(ErrorConstant.Common.PARAM_IS_EMPTY);
PageHelper.startPage(pageNum,pageSize);
List comments = commentDao.getCommentsByCond(commentCond);
- PageInfo pageInfo = new PageInfo<>(comments);
- return pageInfo;
+ return new PageInfo<>(comments);
}
@Override
@@ -137,4 +138,11 @@ public void updateCommentStatus(Integer coid, String status) {
throw BusinessException.withErrorCode(ErrorConstant.Common.PARAM_IS_EMPTY);
commentDao.updateCommentStatus(coid, status);
}
+
+ @Override
+ public void deleteComment(Integer coid) {
+ if (null == coid)
+ throw BusinessException.withErrorCode(ErrorConstant.Common.PARAM_IS_EMPTY);
+ commentDao.deleteComment(coid);
+ }
}
diff --git a/src/main/java/com/wip/service/log/impl/LogServiceImpl.java b/src/main/java/com/wip/service/log/impl/LogServiceImpl.java
index dad5b67..c1b2ac2 100644
--- a/src/main/java/com/wip/service/log/impl/LogServiceImpl.java
+++ b/src/main/java/com/wip/service/log/impl/LogServiceImpl.java
@@ -40,8 +40,7 @@ public void addLog(String action, String data, String ip, Integer authorId) {
public PageInfo getLogs(int pageNum, int pageSize) {
PageHelper.startPage(pageNum,pageSize);
List logs = logDao.getLogs();
- PageInfo pageInfo = new PageInfo<>(logs);
- return pageInfo;
+ return new PageInfo<>(logs);
}
}
diff --git a/src/main/java/com/wip/service/meta/impl/MetaServiceImpl.java b/src/main/java/com/wip/service/meta/impl/MetaServiceImpl.java
index f6fbb94..36f3396 100644
--- a/src/main/java/com/wip/service/meta/impl/MetaServiceImpl.java
+++ b/src/main/java/com/wip/service/meta/impl/MetaServiceImpl.java
@@ -18,12 +18,14 @@
import com.wip.model.RelationShipDomain;
import com.wip.service.article.ContentService;
import com.wip.service.meta.MetaService;
+import java.util.Collections;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
@@ -53,7 +55,7 @@ public void saveMeta(String type, String name, Integer mid) {
// 通过项目名和类型查找有没有存在的
List metas = metaDao.getMetasByCond(metaCond);
// 判断是否找到有相同的
- if (null == metas || metas.size() ==0) {
+ if (CollectionUtils.isEmpty(metas)) {
MetaDomain metaDomain = new MetaDomain();
metaDomain.setName(name);
// 如果有mid代表需要更新
@@ -92,7 +94,7 @@ public List getMetaList(String type, String orderBy, int limit) {
paraMap.put("limit", limit);
return metaDao.selectFromSql(paraMap);
}
- return null;
+ return Collections.emptyList();
}
@Override
@@ -187,36 +189,38 @@ public void deleteMetaById(Integer mid) {
// 通过ID找到该项目
MetaDomain meta = metaDao.getMetaById(mid);
- if (null != meta) {
- String type = meta.getType();
- String name = meta.getName();
- // 删除meta
- metaDao.deleteMetaById(mid);
- // 需要把相关的数据删除
- List relationShips = relationShipDao.getRelationShipByMid(mid);
- // 判断是否查找到项目编号
- if (null != relationShips && relationShips.size() > 0) {
- for (RelationShipDomain relationShip : relationShips) {
- // 通过关联表的文章ID找到该文章
- ContentDomain article = contentService.getArticleById(relationShip.getCid());
- // 判断是否找到文章
- if (null != article) {
- ContentDomain temp = new ContentDomain();
- temp.setCid(relationShip.getCid());
- if (type.equals(Types.CATEGORY.getType())) {
- temp.setCategories(reMeta(name,article.getCategories()));
- }
- if (type.equals(Types.TAG.getType())) {
- temp.setTags(reMeta(name,article.getTags()));
- }
- // 将删除的标签和分类从文章表中去除
- contentService.updateArticleById(temp);
- }
+ if (null == meta) {
+ return;
+ }
+ String type = meta.getType();
+ String name = meta.getName();
+ // 删除meta
+ metaDao.deleteMetaById(mid);
+ // 需要把相关的数据删除
+ List relationShips = relationShipDao.getRelationShipByMid(mid);
+ // 判断是否查找到项目编号
+ if (CollectionUtils.isEmpty(relationShips)) {
+ return;
+ }
+ for (RelationShipDomain relationShip : relationShips) {
+ // 通过关联表的文章ID找到该文章
+ ContentDomain article = contentService.getArticleById(relationShip.getCid());
+ // 判断是否找到文章
+ if (null != article) {
+ ContentDomain temp = new ContentDomain();
+ temp.setCid(relationShip.getCid());
+ if (type.equals(Types.CATEGORY.getType())) {
+ temp.setCategories(reMeta(name,article.getCategories()));
+ }
+ if (type.equals(Types.TAG.getType())) {
+ temp.setTags(reMeta(name,article.getTags()));
}
- // 删除关联meta
- relationShipDao.deleteRelationShipByMid(mid);
+ // 将删除的标签和分类从文章表中去除
+ contentService.updateArticleById(temp);
}
}
+ // 删除关联meta
+ relationShipDao.deleteRelationShipByMid(mid);
}
private String reMeta(String name, String metas) {
String[] ms = StringUtils.split(metas,",");
diff --git a/src/main/java/com/wip/service/option/OptionService.java b/src/main/java/com/wip/service/option/OptionService.java
index 85c5896..c5339c2 100644
--- a/src/main/java/com/wip/service/option/OptionService.java
+++ b/src/main/java/com/wip/service/option/OptionService.java
@@ -29,15 +29,15 @@ public interface OptionService {
/**
* 更新网站配置
- * @param s
- * @param s1
+ * @param name
+ * @param value
*/
void updateOptionByName(String name, String value);
/**
* 通过名称获取网站配置
- * @param site_record
+ * @param siteRecord
* @return
*/
- OptionsDomain getOptionByName(String site_record);
+ OptionsDomain getOptionByName(String siteRecord);
}
diff --git a/src/main/java/com/wip/service/user/impl/UserServiceImpl.java b/src/main/java/com/wip/service/user/impl/UserServiceImpl.java
index 0eb18fd..77acd26 100644
--- a/src/main/java/com/wip/service/user/impl/UserServiceImpl.java
+++ b/src/main/java/com/wip/service/user/impl/UserServiceImpl.java
@@ -10,7 +10,6 @@
import com.wip.exception.BusinessException;
import com.wip.model.UserDomain;
import com.wip.service.user.UserService;
-import com.wip.utils.APIResponse;
import com.wip.utils.TaleUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/wip/utils/AdminCommons.java b/src/main/java/com/wip/utils/AdminCommons.java
index ff9f91f..12345a1 100644
--- a/src/main/java/com/wip/utils/AdminCommons.java
+++ b/src/main/java/com/wip/utils/AdminCommons.java
@@ -15,6 +15,8 @@
@Component
public final class AdminCommons {
+ private AdminCommons(){}
+
/**
* 判断category和cat的交集
diff --git a/src/main/java/com/wip/utils/Commons.java b/src/main/java/com/wip/utils/Commons.java
index 9300aad..adbdf4b 100644
--- a/src/main/java/com/wip/utils/Commons.java
+++ b/src/main/java/com/wip/utils/Commons.java
@@ -17,6 +17,8 @@
@Component
public class Commons {
+ private Commons() {}
+
/**
* 获取随机数数
@@ -79,7 +81,7 @@ public static String fmtdate(Integer unixTime, String patten) {
* @return
*/
public static String blogPermalink(Integer cid) {
- return site_url("/blog/article/" + cid.toString());
+ return site_url("/detail/" + cid.toString());
}
/**
diff --git a/src/main/java/com/wip/utils/DateKit.java b/src/main/java/com/wip/utils/DateKit.java
index e6ce77e..e352c51 100644
--- a/src/main/java/com/wip/utils/DateKit.java
+++ b/src/main/java/com/wip/utils/DateKit.java
@@ -13,7 +13,7 @@
*/
public class DateKit {
-
+ private DateKit(){}
public static String formatDateByUnixTime(long unixTime, String dateFormat) {
return dateFormat(new Date(unixTime * 1000L), dateFormat);
diff --git a/src/main/java/com/wip/utils/GsonUtils.java b/src/main/java/com/wip/utils/GsonUtils.java
index 8d30d9d..7b15a6b 100644
--- a/src/main/java/com/wip/utils/GsonUtils.java
+++ b/src/main/java/com/wip/utils/GsonUtils.java
@@ -11,6 +11,8 @@
* json转换工具
*/
public class GsonUtils {
+
+ private GsonUtils (){}
private static final Gson gson = new Gson();
public static String toJsonString(Object object) {
diff --git a/src/main/java/com/wip/utils/IPKit.java b/src/main/java/com/wip/utils/IPKit.java
index 2942c20..050e074 100644
--- a/src/main/java/com/wip/utils/IPKit.java
+++ b/src/main/java/com/wip/utils/IPKit.java
@@ -9,6 +9,8 @@
*/
public class IPKit {
+ private IPKit() {}
+
/**
* 获取请求IP地址
* @param request
diff --git a/src/main/java/com/wip/utils/MapCache.java b/src/main/java/com/wip/utils/MapCache.java
index 080a45e..74179a1 100644
--- a/src/main/java/com/wip/utils/MapCache.java
+++ b/src/main/java/com/wip/utils/MapCache.java
@@ -5,8 +5,6 @@
**/
package com.wip.utils;
-import javafx.collections.MapChangeListener;
-
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
diff --git a/src/main/java/com/wip/utils/TaleUtils.java b/src/main/java/com/wip/utils/TaleUtils.java
index 8bf10c1..2cc5365 100644
--- a/src/main/java/com/wip/utils/TaleUtils.java
+++ b/src/main/java/com/wip/utils/TaleUtils.java
@@ -14,7 +14,6 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import javax.swing.text.html.parser.Parser;
import java.awt.*;
import java.io.File;
import java.io.InputStream;
@@ -28,6 +27,8 @@
public class TaleUtils {
+ private TaleUtils() {}
+
/**
* 匹配邮箱正则
*/
@@ -118,8 +119,6 @@ public static String getUploadFilePath() {
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
- int lastIndex = path.lastIndexOf("/") + 1;
- path = path.substring(0, lastIndex);
File file = new File("");
return file.getAbsolutePath() + "/";
}
diff --git a/src/main/java/com/wip/utils/Tools.java b/src/main/java/com/wip/utils/Tools.java
index 3a3c68a..f4175d2 100644
--- a/src/main/java/com/wip/utils/Tools.java
+++ b/src/main/java/com/wip/utils/Tools.java
@@ -5,16 +5,19 @@
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
import java.util.Random;
public class Tools {
+ private Tools() {}
+
private static final Random random = new Random();
public static String enAes(String data, String key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
- SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"),"ASE");
+ SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8),"ASE");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encryptedBytes = cipher.doFinal(data.getBytes());
return new BASE64Encoder().encode(encryptedBytes);
@@ -22,7 +25,7 @@ public static String enAes(String data, String key) throws Exception {
public static String deAes(String data, String key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
- SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
+ SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] cipherTextBytes = new BASE64Decoder().decodeBuffer(data);
byte[] decValue = cipher.doFinal(cipherTextBytes);
diff --git a/src/main/java/com/wip/utils/UUID.java b/src/main/java/com/wip/utils/UUID.java
index 9925156..81da41b 100644
--- a/src/main/java/com/wip/utils/UUID.java
+++ b/src/main/java/com/wip/utils/UUID.java
@@ -8,6 +8,8 @@
*/
public abstract class UUID {
+ private UUID() {}
+
static Random r = new Random();
/**
@@ -81,7 +83,6 @@ public static String UU64(java.util.UUID uu) {
public static String UU32(java.util.UUID uuid) {
StringBuilder sb = new StringBuilder();
long m = uuid.getMostSignificantBits();
- long l = uuid.getLeastSignificantBits();
for (int i = 0; i < 13; i++) {
sb.append(_UU32[(int) (m >> ((13 - i - 1) * 5)) & 31]);
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 0411d79..d23713c 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -10,9 +10,9 @@ spring:
filters: stat
driver-class-name: com.mysql.jdbc.Driver
#基本属性
- url: jdbc:mysql://127.0.0.1:3306/lu_tale?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true
+ url: jdbc:mysql://192.168.0.22:3306/lu_tale?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true
username: root
- password: root
+ password: minstone@123
#配置初始化大小/最小/最大
initial-size: 1
min-idle: 1
diff --git a/src/main/resources/lu_tale.sql b/src/main/resources/lu_tale.sql
index 03704f5..a5c6cf3 100644
--- a/src/main/resources/lu_tale.sql
+++ b/src/main/resources/lu_tale.sql
@@ -128,6 +128,20 @@ CREATE TABLE `t_options` (
PRIMARY KEY (`name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('baidu_site_verification', '无', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('google_site_verification', '无', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('site_description', 'KyrieCao的博客', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('site_record', '无', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('site_title', 'KyrieCao', 'KyrieCao');
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('social_csdn', 'https://blog.csdn.net/qq_22067469', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('social_github', 'https://github.com/caozongpeng', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('social_jianshu', 'https://www.jianshu.com/', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('social_resume', '', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('social_twitter', '', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('social_weibo', 'https://weibo.com/', NULL);
+INSERT INTO lu_tale.t_options (name, value, description) VALUES('social_zhihu', 'https://www.zhihu.com/', NULL);
+
+
-- ----------------------------
-- Table structure for t_relationships
-- ----------------------------
@@ -138,24 +152,6 @@ CREATE TABLE `t_relationships` (
PRIMARY KEY (`cid`, `mid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
--- ----------------------------
--- Records of t_relationships
--- ----------------------------
-INSERT INTO `t_relationships` VALUES (27, 41);
-INSERT INTO `t_relationships` VALUES (27, 42);
-INSERT INTO `t_relationships` VALUES (27, 43);
-INSERT INTO `t_relationships` VALUES (27, 46);
-INSERT INTO `t_relationships` VALUES (28, 41);
-INSERT INTO `t_relationships` VALUES (28, 43);
-INSERT INTO `t_relationships` VALUES (29, 41);
-INSERT INTO `t_relationships` VALUES (29, 42);
-INSERT INTO `t_relationships` VALUES (29, 43);
-INSERT INTO `t_relationships` VALUES (30, 48);
-INSERT INTO `t_relationships` VALUES (31, 48);
-INSERT INTO `t_relationships` VALUES (32, 41);
-INSERT INTO `t_relationships` VALUES (32, 43);
-INSERT INTO `t_relationships` VALUES (33, 48);
-
-- ----------------------------
-- Table structure for t_users
-- ----------------------------
diff --git a/src/main/resources/static/blog/css/fonts.css b/src/main/resources/static/blog/css/fonts.css
new file mode 100644
index 0000000..09b901e
--- /dev/null
+++ b/src/main/resources/static/blog/css/fonts.css
@@ -0,0 +1,392 @@
+/* vietnamese */
+@font-face {
+ font-family: 'Monda';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/monda/v16/TK3tWkYFABsmjspuPho7vA.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Monda';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/monda/v16/TK3tWkYFABsmjspvPho7vA.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Monda';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/monda/v16/TK3tWkYFABsmjsphPho.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Monda';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/monda/v16/TK3gWkYFABsmjsLaGw8Lnep_Kg.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Monda';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/monda/v16/TK3gWkYFABsmjsLaGw8Knep_Kg.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Monda';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/monda/v16/TK3gWkYFABsmjsLaGw8Eneo.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'PT Mono';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/ptmono/v13/9oRONYoBnWILk-9AnCIzM-Py.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'PT Mono';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/ptmono/v13/9oRONYoBnWILk-9AnCszM-Py.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'PT Mono';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/ptmono/v13/9oRONYoBnWILk-9AnCEzM-Py.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'PT Mono';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/ptmono/v13/9oRONYoBnWILk-9AnC8zMw.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufA5qW54A.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufJ5qW54A.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufB5qW54A.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufO5qW54A.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufC5qW54A.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufD5qW54A.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufN5qU.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufA5qW54A.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufJ5qW54A.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufB5qW54A.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufO5qW54A.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufC5qW54A.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufD5qW54A.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufN5qU.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufA5qW54A.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufJ5qW54A.woff2) format('woff2');
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufB5qW54A.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufO5qW54A.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufC5qW54A.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufD5qW54A.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Roboto Slab';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/robotoslab/v25/BngMUXZYTXPIvIBgJJSb6ufN5qU.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNwCbHhL4.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNwSbHhL4.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNzybH.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNwCbHhL4.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNwSbHhL4.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNzybH.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNwCbHhL4.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNwSbHhL4.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Rosario';
+ font-style: italic;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfuz0WDhWW_fOEoY2FbNzybH.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2Fz9zT7D.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2F39zT7D.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 300;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2FP9zQ.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2Fz9zT7D.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2F39zT7D.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 400;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2FP9zQ.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2Fz9zT7D.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2F39zT7D.woff2) format('woff2');
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Rosario';
+ font-style: normal;
+ font-weight: 700;
+ src: url(https://fonts.gstatic.com/s/rosario/v31/xfux0WDhWW_fOEoY2FP9zQ.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
diff --git a/src/main/resources/templates/admin/comment_list.html b/src/main/resources/templates/admin/comment_list.html
index ab43d9d..352e77f 100644
--- a/src/main/resources/templates/admin/comment_list.html
+++ b/src/main/resources/templates/admin/comment_list.html
@@ -28,7 +28,7 @@ 评论管理
|
-
|
|
diff --git a/src/main/resources/templates/admin/fragments/footer.html b/src/main/resources/templates/admin/fragments/footer.html
index bd38693..ede0925 100644
--- a/src/main/resources/templates/admin/fragments/footer.html
+++ b/src/main/resources/templates/admin/fragments/footer.html
@@ -2,7 +2,7 @@
diff --git a/src/main/resources/templates/blog/fragments/footer.html b/src/main/resources/templates/blog/fragments/footer.html
index 53c9859..51685db 100644
--- a/src/main/resources/templates/blog/fragments/footer.html
+++ b/src/main/resources/templates/blog/fragments/footer.html
@@ -4,7 +4,7 @@