增加登录校验功能

This commit is contained in:
TinyAnts 2022-09-07 14:21:24 +08:00
parent c6534f3ab4
commit fe4e936b2d
3 changed files with 97 additions and 8 deletions

View File

@ -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<String> 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<User>()
.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);
}

View File

@ -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[]{};
}

View File

@ -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<String, Object> 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;
}