过滤器的应用-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);
        }
    }
}```
相关推荐
程序员清风4 分钟前
科普一下:大模型Token的收费逻辑!
java·后端·面试
Nyarlathotep01135 分钟前
并发集合类(4):ArrayBlockingQueue
java·后端
TopGames9 分钟前
〖Unity GPU粒子插件〗ParticleSystem的终极性能优化方案 十倍百倍的显著提升 现有特效转GPU粒子 高性能特效方案
java·开发语言
Chase_______31 分钟前
计算机数据存储全解:从底层进制转换到存储介质演进
java·开发语言·python
网络工程小王40 分钟前
【LangGraph 子图(Subgraph)详解】学习笔记
java·服务器·数据库·人工智能·langchain
小碗羊肉1 小时前
【JavaWeb | 第七篇】部门管理项目实战
java·开发语言·servlet
YL200404261 小时前
027合并两个有序链表
java·数据结构·算法·链表
维诺菌1 小时前
claude code安装
java·开发语言·ai编程·calude
顶点多余2 小时前
自定义协议、序列化、反序列化实现
java·linux·开发语言·c++·tcp/ip
小新同学^O^2 小时前
简单学习 --> SpringAOP
java·学习·spring·aop