Web监听器

@Component
public class HeaderInterceptor implements WebMvcConfigurer {
    private static final LogUtil log = LogUtil.getLogger(HeaderInterceptor.class);

    private static final List<String> excludeUrls = Arrays.asList(
            "/api/test"
    );
    // 用于排除的url
    private static final List<String> excludeSwaggerUrls = Arrays.asList("/test","/doc.html");

    @Resource
    private RedisUtils redisUtils;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new HandlerInterceptor() {
                    @Override
                    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
                        if ("OPTIONS".equals(request.getMethod())) {
                            return true;
                        }
                        // 放行逻辑,请求的url,判断url是否需要拦截
                        String requestURI = request.getRequestURI();
                        log.info("请求URL:" + requestURI);
                        if (excludeUrls.contains(requestURI) || excludeSwaggerUrls.contains(requestURI)) {
                            return true;
                        }
                        // 获取token
                        String token = request.getHeader(Constant.TOKEN);
                        if (StringUtils.isBlank(token)) {
                            token = request.getParameter(Constant.TOKEN);
                            if (StringUtils.isBlank(token)) {
                                throw new BusinessException(-12, "未获取到token");
                            }
                        }
                        //获取缓存token
                        Map<String, Object> map = (Map) redisUtils.get(token);
                        if (null == map) {
                            throw new BusinessException(-12, "token异常,token已过期或非法");
                        }
                        // 将user信息写入到context上下文中
                        // token自动续期
                        long endTime = redisUtils.getExpire(token);
                        if (endTime < Constant.EXPIRE_TIME_END) {
                            redisUtils.expire(token, Constant.TOKEN_EXPIRE); // 指定过期时间
                        }
                        return true;
                    }

                    @Override
                    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                                @Nullable Exception ex) {
                        // 清除context上下文中
                    }
                })
                .excludePathPatterns("/doc.html");
               
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html", "doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值