|
@@ -0,0 +1,72 @@
|
|
|
+package com.anyway.favor.interceptor;
|
|
|
+
|
|
|
+import com.anyway.exception.LoginException;
|
|
|
+import com.anyway.favor.model.User;
|
|
|
+import com.anyway.favor.service.UserService;
|
|
|
+import com.anyway.util.JwtUtils;
|
|
|
+import com.anyway.util.SessionUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+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.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 登录拦截器
|
|
|
+ *
|
|
|
+ * @author liuchuanwei
|
|
|
+ * @date 2024-08-16
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+public class LoginInterceptor implements HandlerInterceptor {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserService userService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
|
|
+ SessionUtils.clearCurrentUser();
|
|
|
+ HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
|
|
+ HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
+ String token = request.getHeader(JwtUtils.TOKEN_HEADER);
|
|
|
+ if (token != null) {
|
|
|
+ //校验
|
|
|
+ int tokenVerifyResult = JwtUtils.verifyToken(token);
|
|
|
+ if (tokenVerifyResult == 0) {
|
|
|
+ Map<String, Object> map = JwtUtils.parseToken(token);
|
|
|
+ if (map != null) {
|
|
|
+ //校验通过
|
|
|
+ //获取用户信息
|
|
|
+ String userName = (String) map.get("userName");
|
|
|
+ //从数据库中查询用户信息
|
|
|
+ User user = userService.findByUserName(userName);
|
|
|
+ //将用户信息放入session中
|
|
|
+ SessionUtils.putCurrentUser(user);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if (tokenVerifyResult == 1) {
|
|
|
+ log.info("token过期");
|
|
|
+ } else if (tokenVerifyResult == 2) {
|
|
|
+ log.info("token无效");
|
|
|
+ } else if (tokenVerifyResult == 3) {
|
|
|
+ log.info("token解析失败");
|
|
|
+ } else if (tokenVerifyResult == 4) {
|
|
|
+ log.info("token签名错误");
|
|
|
+ } else if (tokenVerifyResult == 5) {
|
|
|
+ log.info("token非法参数");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ throw new LoginException("请登录");
|
|
|
+ }
|
|
|
+}
|