过滤器的应用-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);
        }
    }
}```
相关推荐
聚美智数9 小时前
常见疾病查询-疾病症状—疾病介绍-疾病大全-疾病治疗查询API接口介绍
android·java·数据库
慧都小妮子9 小时前
Aspose.Words for JasperReports v26.6 发布,底层Java大升级
java·pdf·报表工具·aspose.words·文档转换·报表导出·jasperreports
白宇横流学长9 小时前
基于SSM医院电子病历管理系统的设计与实现
java
观远数据9 小时前
经营闭环的最后一公里:从看见问题到解决问题之间还差什么
java·开发语言·数据库
qq_422152579 小时前
PDF页面管理的几种实用方法:拆分、合并、删除指定页面
java·前端·pdf
承渊政道10 小时前
飞算Java炫技赛:Java×Unity数字孪生园区平台的从零落地记录
java·开发语言·unity·技术分享·vibe coding·飞算javaai·飞算java ai炫技赛
wdfk_prog16 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
卓怡学长16 小时前
w255基于springboot仓库管理系统
java·数据库·spring boot·spring·intellij-idea
这个DBA有点耶19 小时前
SQL调优进阶:从“优化一条SQL”到“优化一个系统”的思维升级
java·大数据·数据库·sql·程序人生·dba·改行学it
csdn2015_20 小时前
springboot读取配置的方法
java·spring boot·spring