过滤器的应用-Filter

过滤器

1.工作原理

2.创建Filter

2.1通过注解的方式实现

bash 复制代码
//创建一个类,实现Filter接口
@WebFilter(urlPatterns = "/myfilter") //urlPatterns表示需要拦截的路径
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("---------您已进入过滤器----------");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}
bash 复制代码
//启动类上定义一个过滤器扫描器
@SpringBootApplication
@ServletComponentScan(basePackages = "com.liuhaiyang.springboot.filter")  //filter类的地址
public class SpringbootTest14Application {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringbootTest14Application.class, args);
    }

2.2 springboot的配置类实现

bash 复制代码
//写一个过滤器,不使用注解
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("---------您已进入过滤器222----------");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}
bash 复制代码
//定义一个配置类,用于设定filter
@Configuration 
public class FilterConfig {
    @Bean
    public FilterRegistrationBean myFilterRegistrationBean(){
        FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean(new MyFilter());//构造函数中传入的是自定义的filter对象
 
        //添加过滤路径
        filterRegistrationBean.addUrlPatterns("/user/*");//拦截路径
        return filterRegistrationBean;
    }

如果想要实现重定向可以这么做

bash 复制代码
@Slf4j
@WebFilter(filterName = "first" , urlPatterns = "/*")
@Order(1)
public class Filter implements javax.servlet.Filter{
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("---------您已进入过滤器---------");
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;
        String url = request.getRequestURI();
        if(url.contains("login"))
        {
           filterChain.doFilter(servletRequest,servletResponse);
           log.info("放行!!!");
        }
        else
        {
     		//过滤器触发,进行重定向跳转,跳转到对应的控制器
            String destination = "/user/error"; // 跳转目标
            RequestDispatcher dispatcher = request.getRequestDispatcher(destination);
            dispatcher.forward(request, response);
        }
    }
}```
相关推荐
王嘉俊9253 分钟前
设计模式--适配器模式:优雅解决接口不兼容问题
java·设计模式·适配器模式
王嘉俊9255 分钟前
设计模式--组合模式:统一处理树形结构的优雅设计
java·设计模式·组合模式
道199312 分钟前
50 台小型无人车与50套穿戴终端 5 公里范围内通信组网方案深度研究
java·后端·struts
迎風吹頭髮17 分钟前
UNIX下C语言编程与实践35-UNIX 守护进程编写:后台执行、脱离终端、清除掩码与信号处理
java·c语言·unix
光军oi34 分钟前
全栈开发杂谈————JAVA微服务全套技术栈详解
java·开发语言·微服务
帮帮志34 分钟前
目录【系列文章目录】-(关于帮帮志,关于作者)
java·开发语言·python·链表·交互
聪明的笨猪猪35 分钟前
Java Spring “MVC ”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
Boop_wu2 小时前
[数据结构] Map和Set
java·数据结构·算法
一勺菠萝丶2 小时前
Mac 上用 Homebrew 安装 JDK 8(适配 zsh 终端)完整教程
java·python·macos
毕设源码-朱学姐4 小时前
【开题答辩全过程】以 办公自动化管理系统为例,包含答辩的问题和答案
java·eclipse