过滤器使用

目录

Filter的生命周期:

Springboot使用过滤器

方式一: 通过注解方式实现

方式二:通过 Spring Boot 的配置类实现


Filter的生命周期:

1.init:在服务器启动后,会建立Filter对象,而后调用init方法,只执行一次用于加载资源
2.doFilter:每一次请求被拦截都会执行
3.destory:在服务器关闭后,Filter对象会被销毁,如何服务器对象正常关闭,destory方法会被执行一次

设置拦截路径
设置拦截路径有两种方法,一种是注解配置,一种是设置web.xm

注解配置

即加上一个@WebFilter("")

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
 //设置拦截路径
@WebFilter("/*")
public class Filter1 implements javax.servlet.Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    }
    @Override
    public void destroy() {
    }
}

web.XML配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <filter>
        <filter-name>demo1</filter-name>
        <filter-class>Filter1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>demo1</filter-name>
        //设置拦截路径
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

拦截路径配置的讲解
1.具体的资源路径:/index.jsp 只有在访问index.jsp这个资源的时候过滤器才会被执行
2.拦截目录:/user/* 访问/user下的全部资源的时候过滤器才会被执行
3.后缀名拦截:.jsp 访问后缀名为jsp的资源的时候,过滤器才会被执行
4.拦截全部资源:/
 访问全部资源,都会被拦截url

Springboot使用过滤器

SpringBoot中使用过滤器Filter有两种方式

方式一: 通过注解方式实现

方式二:通过 Spring Boot 的配置类实现

方式一: 通过注解方式实现

首先先写一个过滤器Filter,在类的上方使用 @WebFilter 注解来创建Filter即可

package com.liuhaiyang.springboot.filter;
 
 
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
 
//过滤器
@WebFilter(urlPatterns = "/myservlet")
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);
    }
}

在SpringBoot项目的入口类上方使用注解 @ServletComponentScan 扫描filter包中的注解

package com.liuhaiyang.springboot;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
 
@SpringBootApplication
@ServletComponentScan(basePackages = "com.liuhaiyang.springboot.filter")  //第一种方式
public class SpringbootTest14Application {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringbootTest14Application.class, args);
    }
 
}

在写一个controller

@RequestMapping("/myservlet")
    public @ResponseBody String myservlet(){
        return "/myservlet";
    }

启动测试

 

方式二:通过 Spring Boot 的配置类实现

 首先先写一个过滤器Filter,不使用注解

package com.liuhaiyang.springboot.filter2;
 
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
 
//过滤器
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);
    }
}

再写一个配置类

package com.liuhaiyang.springboot.config;
 
import com.liuhaiyang.springboot.filter2.MyFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration  //定义此类为配置类
public class FilterConfig {
    @Bean
    public FilterRegistrationBean myFilterRegistrationBean(){
        FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean(new MyFilter());
 
        //添加过滤路径
        filterRegistrationBean.addUrlPatterns("/user/*");
        return filterRegistrationBean;
    }
 
}

最后写一个controller类

package com.liuhaiyang.springboot.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
public class MyController {
    @RequestMapping("/user/detail")
    public @ResponseBody String userDetail(){
        return "/user/detail";
    }
 
    @RequestMapping("/center")
    public @ResponseBody String center(){
        return "/center";
    }
}

启动测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
捕获过滤器是一种用于限制和筛选网络流量的工具。它可以根据特定的条件来捕获和显示网络数据包,以便进行分析和故障排除。 捕获过滤器通常用于网络分析和安全监控,可以帮助管理员识别网络中的异常流量、攻击行为或者故障情况。它可以根据源IP地址、目标IP地址、端口号、协议类型等条件来过滤和捕获特定的数据包。 使用捕获过滤器时,需要指定过滤条件,并将其应用于网络接口或者特定的数据包捕获工具(如Wireshark)。捕获过滤器使用一种特定的语法来描述过滤条件,常用的语法包括: 1. IP地址过滤:可以使用源IP地址或目标IP地址来过滤数据包。例如,过滤源IP地址为192.168.1.1的数据包:`src host 192.168.1.1`。 2. 端口号过滤:可以使用源端口号或目标端口号来过滤数据包。例如,过滤目标端口号为80的数据包:`dst port 80`。 3. 协议类型过滤:可以使用协议类型(如TCP、UDP)来过滤数据包。例如,过滤TCP协议的数据包:`tcp`。 4. 逻辑运算符:可以使用逻辑运算符(如and、or、not)来组合多个过滤条件。例如,过滤源IP地址为192.168.1.1且目标端口号为80的数据包:`src host 192.168.1.1 and dst port 80`。 显示过滤器是捕获过滤器的一种扩展,用于在捕获的数据包中进行进一步的筛选和显示。它可以根据数据包的内容、协议字段等条件来过滤和显示特定的数据包。 使用显示过滤器时,需要在捕获工具中指定过滤条件,并将其应用于已捕获的数据包。常用的显示过滤器语法与捕获过滤器类似,可以根据需要进行组合和筛选。 总结一下,捕获过滤器用于限制和捕获特定条件的网络数据包,而显示过滤器用于在已捕获的数据包中进一步筛选和显示特定的数据包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值