From fe4e936b2dc55cc5100c3099047d90074d8ef9dd Mon Sep 17 00:00:00 2001 From: TinyAnts Date: Wed, 7 Sep 2022 14:21:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=99=BB=E5=BD=95=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mdd/front/LikeFrontInterceptor.java | 79 ++++++++++++++++++- .../com/mdd/front/config/FrontConfig.java | 18 ++++- .../front/service/impl/IndexServiceImpl.java | 8 +- 3 files changed, 97 insertions(+), 8 deletions(-) diff --git a/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java b/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java index b89f503b..2bba32e1 100644 --- a/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java +++ b/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java @@ -1,13 +1,24 @@ package com.mdd.front; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.mdd.common.core.AjaxResult; +import com.mdd.common.entity.user.User; import com.mdd.common.enums.HttpEnum; +import com.mdd.common.mapper.user.UserMapper; +import com.mdd.common.utils.RedisUtil; +import com.mdd.front.config.FrontConfig; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.List; /** * 拦截器 @@ -15,8 +26,11 @@ import javax.servlet.http.HttpServletResponse; @Component public class LikeFrontInterceptor implements HandlerInterceptor { + @Resource + UserMapper userMapper; + @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + public boolean preHandle(@NonNull HttpServletRequest request, HttpServletResponse response, @NonNull Object handler) throws Exception { // 404拦截 response.setContentType("application/json;charset=utf-8"); if (response.getStatus() == 404) { @@ -25,12 +39,73 @@ public class LikeFrontInterceptor implements HandlerInterceptor { return false; } + // 判断请求接口 + if (!(handler instanceof HandlerMethod)) { + return HandlerInterceptor.super.preHandle(request, response, handler); + } + + // 免登录接口 + List notLoginUri = Arrays.asList(FrontConfig.notLoginUri); + if (notLoginUri.contains(request.getRequestURI())) { + return HandlerInterceptor.super.preHandle(request, response, handler); + } + + // Token是否为空 + String token = request.getHeader("token"); + if (StringUtils.isBlank(token)) { + AjaxResult result = AjaxResult.failed(HttpEnum.TOKEN_EMPTY.getCode(), HttpEnum.TOKEN_EMPTY.getMsg()); + response.getWriter().print(JSON.toJSONString(result)); + return false; + } + + // Token是否过期 + token = FrontConfig.frontendTokenKey + token; + if (!RedisUtil.exists(token)) { + AjaxResult result = AjaxResult.failed(HttpEnum.TOKEN_INVALID.getCode(), HttpEnum.TOKEN_INVALID.getMsg()); + response.getWriter().print(JSON.toJSONString(result)); + return false; + } + + // 用户信息缓存 + Object uid = RedisUtil.get(token); + Integer userId = Integer.parseInt(uid.toString()); + User user = userMapper.selectOne(new QueryWrapper() + .select("id,sn,username,nickname,mobile,is_disable,is_delete") + .eq("id", userId) + .last("limit 1")); + + // 校验用户被删除 + if (user.getIsDelete() == 1) { + AjaxResult result = AjaxResult.failed(HttpEnum.TOKEN_INVALID.getCode(), HttpEnum.TOKEN_INVALID.getMsg()); + response.getWriter().print(JSON.toJSONString(result)); + return false; + } + + // 校验用户被禁用 + if (user.getIsDisable() == 1) { + AjaxResult result = AjaxResult.failed(HttpEnum.LOGIN_DISABLE_ERROR.getCode(), HttpEnum.LOGIN_DISABLE_ERROR.getMsg()); + response.getWriter().print(JSON.toJSONString(result)); + return false; + } + + // 令牌剩余30分钟自动续签 + if (RedisUtil.ttl(token) < 1800) { + RedisUtil.expire(token, 7200L); + } + + // 写入本地线程 + LikeFrontThreadLocal.put("userId", user.getId()); + LikeFrontThreadLocal.put("userSn", user.getSn()); + LikeFrontThreadLocal.put("username", user.getUsername()); + LikeFrontThreadLocal.put("nickname", user.getNickname()); + LikeFrontThreadLocal.put("mobile", user.getMobile()); + // 验证通过继续操作 return HandlerInterceptor.super.preHandle(request, response, handler); } @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + public void afterCompletion(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler, Exception ex) throws Exception { LikeFrontThreadLocal.remove(); HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } diff --git a/server/like-front/src/main/java/com/mdd/front/config/FrontConfig.java b/server/like-front/src/main/java/com/mdd/front/config/FrontConfig.java index 87d95716..c34f5da8 100644 --- a/server/like-front/src/main/java/com/mdd/front/config/FrontConfig.java +++ b/server/like-front/src/main/java/com/mdd/front/config/FrontConfig.java @@ -10,10 +10,20 @@ public class FrontConfig { // 免登录验证 public static String[] notLoginUri = new String[]{ - "/api/login" + "/api/login", + "/api/index", + "/api/config", + "/api/decorate", + "/api/sms/send", + + "/api/login/check", + "/api/login/register", + "/api/login/forgotPassword", + + "/api/article/category", + "/api/article/collect", + "/api/article/detail", + "/api/article/list", }; - // 免权限验证 - public static String[] notAuthUri = new String[]{}; - } diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/IndexServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/IndexServiceImpl.java index 424007b9..d6100bb9 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/IndexServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/IndexServiceImpl.java @@ -6,6 +6,7 @@ import com.mdd.common.entity.decorate.DecoratePage; import com.mdd.common.entity.decorate.DecorateTabbar; import com.mdd.common.mapper.decorate.DecoratePageMapper; import com.mdd.common.mapper.decorate.DecorateTabbarMapper; +import com.mdd.common.utils.ConfigUtil; import com.mdd.common.utils.ToolsUtil; import com.mdd.common.utils.UrlUtil; import com.mdd.front.service.IIndexService; @@ -55,7 +56,10 @@ public class IndexServiceImpl implements IIndexService { tabs.add(map); } - response.put("pages", ToolsUtil.jsonToMap(decoratePage.getPageData())); + String tabbarStyle = ConfigUtil.get("tabbar", "style", "{}"); + + response.put("pages", decoratePage.getPageData()); + response.put("style", ToolsUtil.jsonToMap(tabbarStyle)); response.put("tabbar", tabs); return response; } @@ -79,7 +83,7 @@ public class IndexServiceImpl implements IIndexService { Map response = new LinkedHashMap<>(); response.put("type", decoratePage.getPageType()); response.put("name", decoratePage.getPageName()); - response.put("pages", ToolsUtil.jsonToMap(decoratePage.getPageData())); + response.put("pages", decoratePage.getPageData()); return response; }