过滤器的应用-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);
        }
    }
}```
相关推荐
驭渊的小故事19 分钟前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
Elastic 中国社区官方博客43 分钟前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1881 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn1 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
y1su2 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
我命由我123453 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
苜蓿muxu3 小时前
Java 字符串拼接:+、StringBuilder、StringBuffer的区别
java
摇滚侠3 小时前
《Java并发编程之美》第 4 章 Java 并发包中原子操作类原理剖析 阅读笔记 7
java·笔记·python
旋律4144 小时前
同义方法区别(增加类与删除类)
java·后端