zj
2025-01-06 0e7b38c2b3af72ea2a7f8a2fcbaad4d78e2c1977
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.gear.customer.swx.filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.alibaba.fastjson2.JSONObject;
import com.auth0.jwt.interfaces.Claim;
import com.gear.common.utils.jwt.JWTTokenUtils;
import com.gear.common.vo.Result;
import org.apache.logging.log4j.util.Strings;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
 
import java.io.OutputStream;
import java.util.Map;
 
@Component
public class CustomInterceptor implements HandlerInterceptor {
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
                String token = request.getHeader("Authorization");
                if (Strings.isEmpty(token)){
                    response.setCharacterEncoding("UTF-8");
                    response.setContentType("text/plain;charset=UTF-8");
                    response.setStatus(HttpServletResponse.SC_OK);
                    Result<String> result = new Result<>(HttpServletResponse.SC_UNAUTHORIZED,"用户未登录");
                    JSONObject jsonObject = JSONObject.from(result);
                    response.getWriter().write(jsonObject.toJSONString()); // 设置响应体内容
                    return false; // 返回 false 停止处理链
                }
                try{
                    String userid = JWTTokenUtils.verifyToken(token);
                    request.setAttribute("userId",userid);
                    String virtually = request.getHeader("virtually");
                    if (!Strings.isEmpty(virtually)){
                        request.setAttribute("virtually",virtually);
                    }
                }catch (Exception e){
                    response.setCharacterEncoding("UTF-8");
                    response.setContentType("text/plain;charset=UTF-8");
                    response.setStatus(HttpServletResponse.SC_OK);
                    Result<String> result = new Result<>(HttpServletResponse.SC_UNAUTHORIZED,"登录状态已失效");
                    JSONObject jsonObject = JSONObject.from(result);
                    response.getWriter().write(jsonObject.toJSONString()); // 设置响应体内容
                    return false; // 返回 false 停止处理链
                }
                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 {
        // 请求处理完成后执行(包括视图渲染完成)
        // 可以进行一些资源清理操作
    }
}