- 不使用SpringBoot
Filter过滤类
1 public class FilterDemo implements Filter { 2 3 @Override 4 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 5 System.out.println("开始拦截"); 6 filterChain.doFilter(servletRequest,servletResponse); 7 System.out.println("拦截结束"); 8 } 9 }
代码说明:过滤类需要实现Filter接口,主要是一下三个方法的继承
//初始化方法 public default void init(FilterConfig filterConfig) throws ServletException {} //实际过滤操作,主要是实现这个方法 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; //Filter销毁方法 public default void destroy() {}
web.xml配置:
<!-- Filter,过滤器 --> <filter> <!-- filter名,随便起 --> <filter-name>AdminFilter</filter-name> <!-- 实现类所在目录 --> <filter-class>cn.daitao.filter.DemoFilter</filter-class> <!-- 初始化参数 --> <!-- 设置字符集,charset:UTF-8 --> <init-param> <!-- 参数名 --> <param-name>charset</param-name> <!-- 参数值 --> <param-value>UTF-8</param-value> </init-param> <!-- 设置内容类型及其字符集,contentType:text/html;charset=UTF-8 --> <init-param> <param-name>contentType</param-name> <param-value>text/html;charset=UTF-8</param-value> </init-param> </filter> <!-- filter的映射 --> <filter-mapping> <!-- 对应的filter名 --> <filter-name>AdminFilter</filter-name> <!-- 要进行拦截过滤的目录 --> <url-pattern>/web/admin/*</url-pattern> </filter-mapping> <session-config> <!-- 超时时间,单位:分钟 --> <session-timeout>30</session-timeout> </session-config>
2. 使用SpringBoot
Filter过滤类:
1 import javax.servlet.*; 2 import javax.servlet.annotation.WebFilter; 3 import javax.servlet.annotation.WebInitParam; 4 import java.io.IOException; 5 6 @WebFilter( 7 filterName = "CharsetFilter", 8 urlPatterns = "/*",/*通配符(*)表示对所有的web资源进行拦截*/ 9 initParams = { 10 @WebInitParam(name = "charset", value = "utf-8")/*这里可以放一些初始化的参数*/ 11 } 12 ) 13 public class FilterDemo implements Filter { 14 15 @Override 16 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 17 System.out.println("开始拦截"); 18 filterChain.doFilter(servletRequest,servletResponse); 19 System.out.println("拦截结束"); 20 } 21 }
代码说明:主要是新增了一个@WebFilter注解,下面是@WebFilter注解的详细说明。
@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 )
@WebFilter的属性
SpringBoot配置类的配置:
package cn.wolfcode; import cn.wolfcode.filterdemo.FilterDemo; import cn.wolfcode.interceptor.DemoInterceptor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @SpringBootApplication public class AppStart implements WebMvcConfigurer { /** * 配置过滤器 * @return */ @Bean public FilterDemo filterDemo(){ return new FilterDemo(); } public static void main(String[] args) { SpringApplication.run(AppStart.class,args); } }
使用注入Bean的方法配置,还可以使用自动扫描配置。