增加登录校验功能
This commit is contained in:
parent
c6534f3ab4
commit
fe4e936b2d
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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[]{};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue