swagger接口文档请求/localhost:8080/doc.html被过滤器拦截

#问题:swagger接口文档请求/localhost:8080/doc.html被过滤器拦截

在使用过滤器和拦截器时候会设置拦截哪些请求,
在这里插入图片描述
下面这一步是设置放行哪些请求,有/login和/doc.html
但是在设置拦截/doc.html后,访问localhost:8080/doc.html去查看接口文档还是会被拦截;
在这里插入图片描述

解决方法:试试多放行三个路径,如下图:
在这里插入图片描述

//拦截所有请求
//Filter是java三大组件,要在springboot里使用要加启动类@ServletComponentScan注解
配置过滤器要拦截的请求路径( /* 表示拦截浏览器的所有请求 )
@WebFilter(urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //前置:强制转换为http协议的请求对象、响应对象 (转换原因:要使用子类中特有方法)
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        //1.获取请求url
        String url = request.getRequestURI().toString();
        //2.判断请求url中是否包含login,如果包含,说明是登录操作,放行
        //下面这个拦截非常重要,请务必整理笔记
        if (url.contains("/login") || url.equals("/doc.html") || url.contains("/swagger-ui.html") || url.contains("/swagger-resources") || url.contains("/v2/api-docs") ){
            filterChain.doFilter(request, response); // 放行请求
            return;
        }

        //3.获取请求头中的令牌(token)
        String jwt = request.getHeader("token");
        log.info("从请求头中获取的令牌{}",jwt);

        //4.判断令牌是否存在,如果不存在,返回错误信息(未登录)
        if(!StringUtils.hasLength(jwt)){
            //和前端约定好的,返回Not_LOGIN
            log.info("请求头token为空,返回登录信息");
            Result error = Result.error("NOT_LOGIN");
            //将对象转换为json字符串
            String notLogain = JSONObject.toJSONString(error);
            response.getWriter().write(notLogain);
            return;
        }

        //5.解析token,如果解析失败,返回错误结果
        try {
            JwtUtils.parseJWT(jwt);
        } catch (Exception e) {
            e.printStackTrace();
            log.info("解析令牌失败,返回未登录错误信息");
            Result error = Result.error("Not_Login");
            //将对象转换为json字符串
            String notLogain = JSONObject.toJSONString(error);
            response.getWriter().write(notLogain);
            return;
        }
        //6.放行操作
        log.info("令牌合法,放行");
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值