diff --git a/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java b/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java index 2b86c31f9..01be00b2b 100644 --- a/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java +++ b/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java @@ -143,7 +143,12 @@ public enum BlogPropertiesEnum { /** * 自动备份 */ - AUTO_BACKUP("auto_backup"); + AUTO_BACKUP("auto_backup"), + + /** + * API Token + */ + API_TOKEN("api_token"); private String prop; diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java index 992435c48..f2b932789 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java @@ -8,6 +8,7 @@ import cc.ryanc.halo.model.dto.HaloConst; import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.dto.LogsRecord; import cc.ryanc.halo.model.enums.CommonParamsEnum; +import cc.ryanc.halo.model.enums.ResponseStatusEnum; import cc.ryanc.halo.model.enums.ResultCodeEnum; import cc.ryanc.halo.model.enums.TrueFalseEnum; import cc.ryanc.halo.service.*; @@ -35,6 +36,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Date; import java.util.List; +import java.util.Random; /** *
@@ -239,4 +241,16 @@ public class AdminController extends BaseController {
     public String halo() {
         return "admin/admin_halo";
     }
+
+    /**
+     * 获取一个Token
+     *
+     * @return JsonResult
+     */
+    @GetMapping(value = "/getToken")
+    @ResponseBody
+    public JsonResult getToken() {
+        String token = (System.currentTimeMillis() + new Random().nextInt(999999999)) + "";
+        return new JsonResult(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), SecureUtil.md5(token));
+    }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java b/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java
index 431eaecf5..3f5f931ac 100644
--- a/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java
+++ b/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java
@@ -4,12 +4,15 @@ import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.enums.BlogPropertiesEnum;
 import cc.ryanc.halo.model.enums.TrueFalseEnum;
 import cn.hutool.core.util.StrUtil;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 
@@ -25,7 +28,18 @@ public class ApiInterceptor implements HandlerInterceptor {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         if (StrUtil.equals(TrueFalseEnum.TRUE.getDesc(), HaloConst.OPTIONS.get(BlogPropertiesEnum.API_STATUS.getProp()))) {
-            return true;
+            if (StrUtil.equals(request.getHeader("token"), HaloConst.OPTIONS.get(BlogPropertiesEnum.API_TOKEN.getProp()))) {
+                return true;
+            } else {
+                response.setCharacterEncoding("UTF-8");
+                response.setContentType("application/json;charset=utf-8");
+                Map map = new HashMap<>(2);
+                ObjectMapper mapper = new ObjectMapper();
+                map.put("code", 400);
+                map.put("msg", "Invalid Token");
+                response.getWriter().write(mapper.writeValueAsString(map));
+                return false;
+            }
         }
         response.sendRedirect("/404");
         return false;
diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties
index 1b9c25f80..c8a974c92 100644
--- a/src/main/resources/i18n/messages.properties
+++ b/src/main/resources/i18n/messages.properties
@@ -246,6 +246,7 @@ admin.setting.form.email-from-name = 发件姓名:
 admin.setting.form.api-status = API 服务:
 admin.setting.form.statistics-code = 统计代码:
 admin.setting.form.statistics-code-tips = 可以使用cnzz,百度,google等
+admin.setting.form.btn-update-token = 刷新
 
 # 页面管理页面
 admin.pages.title = 页面管理
diff --git a/src/main/resources/i18n/messages_en_US.properties b/src/main/resources/i18n/messages_en_US.properties
index 871bf1558..0e6b57c09 100644
--- a/src/main/resources/i18n/messages_en_US.properties
+++ b/src/main/resources/i18n/messages_en_US.properties
@@ -246,6 +246,7 @@ admin.setting.form.email-from-name = Shipping name:
 admin.setting.form.api-status = API server:
 admin.setting.form.statistics-code = Statistics code:
 admin.setting.form.statistics-code-tips = Can use cnzz, Baidu, google, etc.
+admin.setting.form.btn-update-token = Update
 
 # pages page
 admin.pages.title = Pages manage
diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties
index 1b9c25f80..c8a974c92 100644
--- a/src/main/resources/i18n/messages_zh_CN.properties
+++ b/src/main/resources/i18n/messages_zh_CN.properties
@@ -246,6 +246,7 @@ admin.setting.form.email-from-name = 发件姓名:
 admin.setting.form.api-status = API 服务:
 admin.setting.form.statistics-code = 统计代码:
 admin.setting.form.statistics-code-tips = 可以使用cnzz,百度,google等
+admin.setting.form.btn-update-token = 刷新
 
 # 页面管理页面
 admin.pages.title = 页面管理
diff --git a/src/main/resources/templates/admin/admin_option.ftl b/src/main/resources/templates/admin/admin_option.ftl
index 964a680a0..5c960fcd4 100755
--- a/src/main/resources/templates/admin/admin_option.ftl
+++ b/src/main/resources/templates/admin/admin_option.ftl
@@ -630,6 +630,17 @@
                                             
                                         
                                     
+                                    
+ +
+
+ + + + +
+
+