当前位置: 首页 > news >正文

过滤器Filter,拦截器Interceptor

  1. 过滤器Filter
    1. 快速入门

       

    2. 详情
    3. 登录校验-Filter
      1. package com.itheima.filter;import com.alibaba.fastjson.JSONObject;
        import com.itheima.pojo.Result;
        import com.itheima.utils.JwtUtils;
        import lombok.extern.slf4j.Slf4j;
        import org.springframework.util.StringUtils;import javax.servlet.*;
        import javax.servlet.annotation.WebFilter;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import java.io.IOException;/*** @author Mr.jia* @version 1.0*/
        @Slf4j
        @WebFilter(urlPatterns = "/*")
        public class LoginCheckFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) servletRequest;HttpServletResponse resp = (HttpServletResponse) servletResponse;//1.获取请求urlString url = req.getRequestURI().toString();log.info("请求的url:{}",url);//2.判断请求url中是否包含login,如果包含,说明是登录操作,放行if(url.contains("login")){log.info("登录操作,放行...");filterChain.doFilter(servletRequest,servletResponse);return;}//3.获取请求头中的令牌String jwt = req.getHeader("token");//4.判断令牌是否存在,如果不存在,返回错误结果(未登录)if(!StringUtils.hasLength(jwt)){log.info("请求头token为空,返回登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换  对象---json----->阿里巴巴fastJSONString notLogin = JSONObject.toJSONString(error);resp.getWriter().write(notLogin);return;}//5.解析token,如果解析失败,返回错误结果(未登录)try {JwtUtils.parseJWT(jwt);} catch (Exception e) {//解析失败e.printStackTrace();log.info("解析令牌失败,返回登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换  对象---json----->阿里巴巴fastJSONString notLogin = JSONObject.toJSONString(error);resp.getWriter().write(notLogin);return;}//6.放行log.info("令牌合法,放行");filterChain.doFilter(servletRequest,servletResponse);}
        }
        

  2. 拦截器Interceptor
    1. 简介&快速入门
      1. package com.itheima.interceptor;import org.springframework.stereotype.Component;
        import org.springframework.web.servlet.HandlerInterceptor;
        import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;/*** @author Mr.jia* @version 1.0*/
        @Component
        public class LoginCheckInterceptor implements HandlerInterceptor {@Override //目标资源方法运行前运行,返回true:放行,false:不放行public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}@Override //目标资源方法运行后运行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}@Override //视图渲染完毕后运行,最后运行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");}
        }
        

        定义拦截器

      2. package com.itheima.config;import com.itheima.interceptor.LoginCheckInterceptor;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.context.annotation.Configuration;
        import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
        import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @author Mr.jia* @version 1.0*/
        @Configuration//配置类
        public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**");}
        }
        

        配置拦截器

    2. 详解(拦截路径,执行流程)
    3. 登录校验-Interceptor
      1. /*** @author Mr.jia* @version 1.0*/
        @Slf4j
        @Component
        public class LoginCheckInterceptor implements HandlerInterceptor {@Override //目标资源方法运行前运行,返回true:放行,false:不放行public boolean preHandle(HttpServletRequest servletRequest, HttpServletResponse servletResponse, Object handler) throws Exception {//1.获取请求urlString url = servletRequest.getRequestURI().toString();log.info("请求的url:{}",url);//2.判断请求url中是否包含login,如果包含,说明是登录操作,放行if(url.contains("login")){log.info("登录操作,放行...");return true;}//3.获取请求头中的令牌String jwt = servletRequest.getHeader("token");//4.判断令牌是否存在,如果不存在,返回错误结果(未登录)if(!StringUtils.hasLength(jwt)){log.info("请求头token为空,返回登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换  对象---json----->阿里巴巴fastJSONString notLogin = JSONObject.toJSONString(error);servletResponse.getWriter().write(notLogin);return false;}//5.解析token,如果解析失败,返回错误结果(未登录)try {JwtUtils.parseJWT(jwt);} catch (Exception e) {//解析失败e.printStackTrace();log.info("解析令牌失败,返回登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换  对象---json----->阿里巴巴fastJSONString notLogin = JSONObject.toJSONString(error);servletResponse.getWriter().write(notLogin);return false;}//6.放行log.info("令牌合法,放行");return true;}@Override //目标资源方法运行后运行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}@Override //视图渲染完毕后运行,最后运行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");}
        }

http://www.lryc.cn/news/89515.html

相关文章:

  • kafka整理
  • 为什么有些情况下需要重写equals()和hashCode()方法?
  • 14-Vue技术栈之Vue3快速上手
  • JavaScript高级三、深入面向对象
  • static
  • zabbix动作执行失败 No media defined for user.
  • JavaScript this 关键字
  • ubuntu基本信息查询
  • Revit问题:创建牛腿柱和快速生成圈梁
  • k8s节点删除
  • 45°装备系统
  • 逻辑漏洞学习-身份验证漏洞
  • 【ChatGPT】ChatGPT自动生成思维导图
  • cf1200构造15道
  • 【JavaSE】Java基础语法(十七)
  • 《Spring Guides系列学习》guide11 - guide15
  • 软件测试面试了一个00后,让我见识到了什么是内卷届的天花板
  • JAVA BigDecimal 比较大小 、计算
  • 并发编程Bug的根源
  • 从零搭建微服务-认证中心(二)
  • python入门(11)面向对象 :模块与包
  • 《深入理解计算机系统(CSAPP)》第3章 程序的机器级表示 - 学习笔记
  • 【数据结构】第六周
  • 6.4.6拓扑排序
  • Ae:常用内置抠像效果
  • [ 支付宝支付笔记]
  • 2023九坤投资暑期实习笔试复盘
  • 深度学习的定义和未来发展趋势
  • 如何更改 Linux 文件和目录权限?
  • Revit楼板问题:楼板连接处以及楼板开洞,一键开洞