springBoot2.0实现过滤器,拦截器

说明

楼主使用springBoot2.0搭建测试项目

pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>springDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springDemo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

只有一个controller

 拦截器

第一步:

新建一个拦截器实现HandlerInterceptor接口


/**  
 * Project Name:springDemo  
 * File Name:MyInterceptor.java  
 * Package Name:com.springDemo.interceptor  
 * Date:2019年3月11日下午2:17:18  
 * @author yym 
 *  
 */

package com.springDemo.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * ClassName: MyInterceptor <br/>
 * Function: TODO ADD FUNCTION. <br/>
 * Reason: TODO ADD REASON(可选). <br/>
 * date: 2019年3月11日 下午2:17:18 <br/>
 * 
 * @author yym
 * @version
 * @since JDK 1.8
 */
public class MyInterceptor implements HandlerInterceptor {

	/**
	 * TODO 简单描述该方法的实现功能(可选).
	 * 
	 * @see org.springframework.web.servlet.HandlerInterceptor#preHandle(javax.servlet.http.HttpServletRequest,
	 *      javax.servlet.http.HttpServletResponse, java.lang.Object)
	 */

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("自定义MyInterceptor的------------------preHandle执行.....");
		return HandlerInterceptor.super.preHandle(request, response, handler);
	}

	/**
	 * TODO 简单描述该方法的实现功能(可选).
	 * 
	 * @see org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet.http.HttpServletRequest,
	 *      javax.servlet.http.HttpServletResponse, java.lang.Object,
	 *      org.springframework.web.servlet.ModelAndView)
	 */

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("自定义MyInterceptor的------------------postHandle执行.....");
		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
	}

	/**
	 * TODO 简单描述该方法的实现功能(可选).
	 * 
	 * @see org.springframework.web.servlet.HandlerInterceptor#afterCompletion(javax.servlet.http.HttpServletRequest,
	 *      javax.servlet.http.HttpServletResponse, java.lang.Object,
	 *      java.lang.Exception)
	 */

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("自定义MyInterceptor的------------------afterCompletion执行.....");
		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
	}

}

第二步:

用java的方式新建一个配置类

继承WebMvcConfigurationSupport

重写 addInterceptors(InterceptorRegistry registry) 

来管理拦截器


/**  
 * Project Name:springDemo  
 * File Name:WebMvcConfig.java  
 * Package Name:com.springDemo.config  
 * Date:2019年3月11日下午2:21:50  
 * @author yym 
 *  
 */

package com.springDemo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import com.springDemo.interceptor.MyInterceptor;

/**
 * ClassName: WebMvcConfig <br/>
 * Function: TODO ADD FUNCTION. <br/>
 * Reason: TODO ADD REASON(可选). <br/>
 * date: 2019年3月11日 下午2:21:50 <br/>
 * 
 * @author yym
 * @version
 * @since JDK 1.8
 */
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

	/**
	 * TODO 简单描述该方法的实现功能(可选).
	 * 
	 * @see org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry)
	 */

	@Override
	protected void addInterceptors(InterceptorRegistry registry) {
		super.addInterceptors(registry);
		registry.addInterceptor(new MyInterceptor());
		
	}

}

测试如下:

过滤器

 第一步:

新建一个MyFilter实现Filter

@Component
@WebFilter(urlPatterns = "/**", filterName = "myFilter")
public class MyFilter implements Filter {

	/**
	 * TODO 简单描述该方法的实现功能(可选).
	 * 
	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
	 *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
	 */

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("MyFilter执行了");
		chain.doFilter(request, response);

	}

}

第二步

配置filter

方式一

通过@WebFilter(urlPatterns = "/**", filterName = "myFilter")

结果如下:

方式二:

通过配置

@Configuration
public class FilterConfig {
	@Bean
	public FilterRegistrationBean<MyFilter> testFilterRegistration() {
		FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>();
		registration.setFilter(new MyFilter());
		registration.addUrlPatterns("/*"); //
		registration.setOrder(1);
		return registration;
	}

}

注意方式2 的拦截规则和方式1不同

 

过滤器和拦截器的区别:

  1.   拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  2.   拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
  3.   拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  4.   拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  5.   在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
  6.   拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值