From 42e8cb4d1c9655e161df8088473d0b943d879e37 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 14 Dec 2021 11:54:58 +0800 Subject: [PATCH] 20211214 --- src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java | 94 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 94 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java new file mode 100644 index 0000000..c14164d --- /dev/null +++ b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java @@ -0,0 +1,94 @@ +package cc.mrbird.febs.common.interceptor; + +import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.common.utils.AppContants; +import cc.mrbird.febs.common.utils.RedisUtils; +import cc.mrbird.febs.common.utils.SpringContextUtil; +import cc.mrbird.febs.video.entity.VideoMemberEntity; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import com.alibaba.fastjson.JSON; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Slf4j +public class LoginInterceptor implements HandlerInterceptor { + + private final RedisUtils redisUtils = SpringContextUtil.getBean(RedisUtils.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String headerToken = request.getHeader("token"); + if (StringUtils.isBlank(headerToken)) { + responseUnAuth(response); + return false; + } + + String token = resolveToken(headerToken); + + if (token == null || AppContants.TIME_OUT.equals(token)) { + responseUnAuth(response); + return false; + } + + String userJsonStr = redisUtils.getString(token); + if (StringUtils.isBlank(userJsonStr)) { + responseUnAuth(response); + return false; + } + VideoMemberEntity member = JSON.parseObject(userJsonStr, VideoMemberEntity.class); + + request.getSession().setAttribute("member", member); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + + } + + private void responseUnAuth(HttpServletResponse response) throws IOException { + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json; charset=utf-8"); + response.getWriter().write(new ObjectMapper().writeValueAsString(new FebsResponse().code(HttpStatus.UNAUTHORIZED))); + } + + private String resolveToken(String token) { + try { + RSA rsa = new RSA(AppContants.PRIVATE_KEY, null); + String[] tokens = StrUtil.split(rsa.decryptStr(token, KeyType.PrivateKey), "_"); + if (verifyTokenExpired(Long.parseLong(tokens[1]))) { + return tokens[0]; + } else { + return AppContants.TIME_OUT; + } + } catch (Exception e) { + log.error("#解析token异常#", e); + return null; + } + } + + private Boolean verifyTokenExpired(Long time) { + boolean isDebug = true; + if (!isDebug) { + long currentTime = System.currentTimeMillis(); + return currentTime - time <= 30000; + } + return true; + } +} + -- Gitblit v1.9.1