过滤器Filter,拦截器Interceptor

这篇具有很好参考价值的文章主要介绍了过滤器Filter,拦截器Interceptor。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

       

      1. 过滤器Filter,拦截器Interceptor
      2. 过滤器Filter,拦截器Interceptor
      3. 过滤器Filter,拦截器Interceptor
    2. 详情
      1. 过滤器Filter,拦截器Interceptor
      2. 过滤器Filter,拦截器Interceptor
      3. 过滤器Filter,拦截器Interceptor
      4. 过滤器Filter,拦截器Interceptor
    3. 登录校验-Filter
      1. 过滤器Filter,拦截器Interceptor
      2. 过滤器Filter,拦截器Interceptor
      3. 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 {
            @Override
            public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                HttpServletRequest req = (HttpServletRequest) servletRequest;
                HttpServletResponse resp = (HttpServletResponse) servletResponse;
                //1.获取请求url
                String 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----->阿里巴巴fastJSON
                    String 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----->阿里巴巴fastJSON
                    String notLogin = JSONObject.toJSONString(error);
                    resp.getWriter().write(notLogin);
                    return;
                }
                //6.放行
                log.info("令牌合法,放行");
                filterChain.doFilter(servletRequest,servletResponse);
            }
        }
        
  2. 拦截器Interceptor
    1. 简介&快速入门
      1. 过滤器Filter,拦截器Interceptor
      2. 过滤器Filter,拦截器Interceptor
      3. 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");
            }
        }
        

        定义拦截器

      4. 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 {
        
            @Autowired
            private LoginCheckInterceptor loginCheckInterceptor;
        
            @Override
            public void addInterceptors(InterceptorRegistry registry){
                registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**");
            }
        }
        

        配置拦截器文章来源地址https://www.toymoban.com/news/detail-465242.html

    2. 详解(拦截路径,执行流程)
      1. 过滤器Filter,拦截器Interceptor
      2. 过滤器Filter,拦截器Interceptor
    3. 登录校验-Interceptor
      1. 过滤器Filter,拦截器Interceptor
      2. 过滤器Filter,拦截器Interceptor
      3. /**
         * @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.获取请求url
                String 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----->阿里巴巴fastJSON
                    String 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----->阿里巴巴fastJSON
                    String 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");
            }
        }

到了这里,关于过滤器Filter,拦截器Interceptor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring】Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    2024年02月13日
    浏览(33)
  • 过滤器和拦截器的辨析

    过滤器和拦截器都是为了在请求到达目标处理器(Servlet或Controller)之前或者之后插入自定义的处理逻辑 过滤器 : 遵循AOP(面向切面编程)思想实现,基于Servlet规范提供的Filter接口,它是位于客户端请求与服务器响应之间的一个组件,依赖于Servlet容器。当请求到达服务器时,过滤器

    2024年03月11日
    浏览(31)
  • JAVA中的拦截器、过滤器

    相关解释:拦截器依赖于页面有访问controller的操作,且属于SpringMVC体系的动态拦截调用机制,是java中AOP思想的运用。 来看看源码作者的注释: 其中倒数第二段话,描述其类似于过滤器,但其特点只允许使用自定义预处理,不能处理程序本身。此处可体现AOP思想。 过滤器是

    2024年02月13日
    浏览(27)
  • 【SpringBoot】过滤器,监听器,拦截器介绍

    通过两幅图我们可以理解拦截器和过滤器的特点 1、过滤器 过滤器是在请求进入tomcat容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。 理解上面这句话我们就可以知道,进入servlet之前,主要是两个参数:ServletRequest,

    2024年02月04日
    浏览(40)
  • 过滤器,监听器与拦截器的区别

    ​ 过滤器和监听器不是Spring MVC中的组件,而是Servlet的组件,由Servlet容器来管理。拦截器是Spring MVC中的组件,由Spring容器来管理 ​ Servlet过滤器与Spring MVC 拦截器在Web应用中所处的层次如下图所示: 过滤器是Servlet的高级特性之一,是实现Filter接口的Java类。其基本功能就是对

    2024年02月14日
    浏览(34)
  • Spring Boot拦截器与过滤器的区别

    在使用Spring Boot开发Web应用程序时,您可能需要在处理请求之前或之后执行某些操作。这些操作可以包括身份验证、日志记录、性能监测等。在这种情况下,您可以使用两种不同的机制:拦截器和过滤器。本文将介绍这两种机制及其区别,并提供一些示例代码来演示如何在S

    2024年02月08日
    浏览(46)
  • spring boot 过滤器&拦截器与aop

    在使用 Spring 框架时,可以通过在 web.xml 配置文件中注册过滤器,使其在请求进入 Spring 前就能够进行预处理。这样可以在请求进入 Spring MVC 的 DispatcherServlet 之前,对请求进行拦截、修改或者过滤。 过滤器在 Spring 中的应用场景包括但不限于: 字符编码过滤:通过过滤器,在

    2024年02月01日
    浏览(35)
  • 登录页面jwt密钥,过滤器,拦截器,异常处理

    需求: 用户未登录时,访问其他也没面,操作添加、删除等操作时,强行跳转至登录页面。 实现方法: 1.使用Cookie,登录后后端添加一个cookie,每次页面判断是否有cookie, 2。使用session,原理同上,只不过session是存储在服务器里的,cookie是在浏览器里。 3。使用jwt令牌,登

    2023年04月25日
    浏览(40)
  • Springboot中使用拦截器、过滤器、监听器

    Javaweb三大组件:servlet、Filter(过滤器)、 Listener(监听器) SpringBoot特有组件:Interceptor(拦截器) 过滤器、拦截器、监听器、AOP(后续文章介绍)、全局异常处理器(后续文章介绍)是搭建系统框架时,经常用到的部分,全局异常处理器的作用很明显,就是处理接口执行

    2024年02月03日
    浏览(24)
  • springbboot拦截器,过滤器,监听器及执行流程

    过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前 请求按照上图进入conteoller后执行完再返回 过滤器是Servlet规范中定义的一种组件,可以用于在请求进入Web应用程序之前或响应离开Web应用程序之前对请

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包