赞
踩
在使用过滤器和拦截器时候会设置拦截哪些请求,
下面这一步是设置放行哪些请求,有/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("令牌合法,放行"); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。