springBoot过滤器和拦截器使用

2022年12月2日12:28:42

springBoot过滤器和拦截器使用

一、SpringBoot中的过滤器(Listener操作同理)


1.1 创建过滤器

packagecom.qf.filter;importjavax.servlet.*;importjavax.servlet.annotation.WebFilter;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;@WebFilter(urlPatterns="/filter/*")//指定拦截路径publicclassLoginFilterimplementsFilter{@OverridepublicvoiddoFilter(ServletRequest request,ServletResponse response,FilterChain chain)throwsIOException,ServletException{System.out.println("LoginFilter ");HttpServletRequest req=(HttpServletRequest)request;HttpServletResponse resp=(HttpServletResponse)response;

        chain.doFilter(req,resp);}}

1.2 创建Controller测试类

packagecom.qf.controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/filter")publicclassFilterController{@RequestMapping("/login")publicStringlogin(){System.out.println("登录");return"login";}}

1.3 在启动类添加@ServletComponentScan注解

packagecom.qf;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication@ServletComponentScan//Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册publicclassSpringboot02Application{publicstaticvoidmain(String[] args){SpringApplication.run(Springboot02Application.class, args);}}

访问controller测试即可

二、SpringBoot中的拦截器


2.1.创建自定义拦截器

packagecom.qf.interceptor;importorg.omg.PortableInterceptor.Interceptor;importorg.springframework.web.servlet.HandlerInterceptor;importorg.springframework.web.servlet.ModelAndView;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassMyInterceptorimplementsHandlerInterceptor{//进入controller方法之前调用@OverridepublicbooleanpreHandle(HttpServletRequest request,HttpServletResponse response,Object handler)throwsException{System.out.println("preHandle");returntrue;//true表示放行,false表示不放行}//调用完controller之后,视图渲染之前@OverridepublicvoidpostHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView)throwsException{System.out.println("postHandle");}//页面跳转之后,整个流程执行之后,一般用于资源清理操作@OverridepublicvoidafterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex)throwsException{System.out.println("afterCompletion");}}

2.2创建拦截器配置类

packagecom.qf.interceptor;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;@ConfigurationpublicclassMyInterceptorConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){//设置拦截器并指定拦截路径
        registry.addInterceptor(newMyInterceptor()).addPathPatterns("/interceptor/*");//registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");//拦截所有//registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/test");//指定不拦截//添加自定义拦截器WebMvcConfigurer.super.addInterceptors(registry);}}

2.3在static目录下创建index.html以及controller测试类

packagecom.qf.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;@ControllerpublicclassInterceptorController{@RequestMapping("/interceptor/myinterceptor")publicStringmyinterceptor(){System.out.println("myinterceptor");return"/index.html";}}

访问controller测试即可

  • 作者:九离⠂
  • 原文链接:https://blog.csdn.net/qq_43410878/article/details/123872453
    更新时间:2022年12月2日12:28:42 ,共 3617 字。