SpringBoot框架下使用过滤器Filter
Java过滤器能够对目标资源的请求和响应进行截取。
过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,看到Filter 接口中定义了三个方法 。
- init() :该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期
只会被调用一次 。注意:这个方法必须执行成功,否则过滤器会不起作用。 - doFilter() :容器中的
每一次请求 都会调用该方法, FilterChain 用来调用下一个过滤器 Filter。 - destroy(): 当容器销毁 过滤器实例时调用该方法,一般在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也
只会被调用一次
1. 第一种方式:注解的方式@WebFilter,@ServletComponentScan
1.1 创建过滤器
定义一个拦截器类实现Filter接口实现doFilter方法(每一次请求都会调用)
src/main/java/com/guo/springboot/filter/MyFilter.java
package com.guo.springboot.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/myfilter")
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);
}
}
1.2 SpringBoot入口类开启包扫描
SpringBoot程序入口类,配置扫描包注解
src/main/java/com/guo/springboot/Application.java
package com.guo.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan(basePackages = "com.guo.springboot.filter")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
1.3 结果分析
这里只是一个URL请求的过滤,没有制作的请求的页面所以这里请求404找不到页面,咱们目的是测试请求的过滤,,看程序。 控制台这里打印出过滤器的逻辑处理结果,很很明显过滤了本次请求
2. 第二种方式:配置类组件FilterRegistrationBean
2.1 创建过滤器
创建过滤器类实现Filter接口,重写doFilter方法
src/main/java/cosm/guo/springboot/filter/MyFilter.java
package com.guo.springboot.filter;
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("------进入过滤器--------");
filterChain.doFilter(servletRequest,servletResponse);
}
}
2.2 配置类——配置过滤器
配置类——配置过滤器的拦截URL
src/main/java/com/guo/springboot/config/FilterConfig.java
package com.guo.springboot.config;
import com.guo.springboot.filter.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;
}
}
2.3 创建控制层
控制层
src/main/java/com/guo/springboot/controller/UserController.java
package com.guo.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@RequestMapping("/user/detail")
public @ResponseBody String userDetail(){
return "UserDetail";
}
@RequestMapping("/center")
public @ResponseBody String center(){
return "center";
}
}
2.4 结果分析
过滤器配置的过滤路径是/user/*,这里的请求路径是/user/detail,这里成功被过滤了
|