首页 > 编程语言 > 详细

SpringBoot过滤器(Filter)、切面(Aspect)、拦截器(interceptor)

时间:2020-11-19 22:05:21      阅读:88      评论:0      收藏:0      [点我收藏+]
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;

import javax.servlet.*;
import java.io.IOException;

@Configuration
@Order(1)
public class FilterTest implements Filter {
    public FilterTest(){
        System.out.println("-----------FilterTest1构造器---------");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("------------FilterTest1--init-----------");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("------------FilterTest1--doFilter-----------");
    }
    @Override
    public void destroy() {
        System.out.println("------------FilterTest1--destroy-----------");
    }
}
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;

import javax.servlet.*;
import java.io.IOException;

@Configuration
@Order(2)
public class FilterTest2 implements Filter {
    public FilterTest2(){
        System.out.println("-----------FilterTest2构造器---------");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("------------FilterTest2--init-----------");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("------------FilterTest2--doFilter-----------");
    }
    @Override
    public void destroy() {
        System.out.println("------------FilterTest2--destroy-----------");
    }
}
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class AspectTest{
    public AspectTest(){
        System.out.println("---------AspectTest构造器----------");
    }
    /**
     * 定义一个方法,用于声明切入点表达式,方法中一般不需要添加其他代码
     * 使用@Pointcut声明切入点表达式
     * 后面的通知直接使用方法名来引用当前的切点表达式;如果是其他类使用,加上包名即可
     */
    @Pointcut("execution(public * com.sdhs.finance.emarket.provider..*Controller.*(..))")
    public void pointcut() {
    }
    @Before(value = "pointcut()")
    public void aroundMethod(JoinPoint joinPoint) {
        System.out.println("---------AspectTest--before----------");
    }
}
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

public class InterceptorTest implements HandlerInterceptor {
    public InterceptorTest() {
        System.out.println("------InterceptorTest 构造器------");
    }
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("------InterceptorTest----preHandle----");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("------InterceptorTest----postHandle----");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("------InterceptorTest----afterCompletion----");
    }
}

// ==================================================

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


/**
 * 跨域
 * @author: louxw
 * @date: 2019-03-11 15:29
 */

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
	// #添加token拦截器
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 添加拦截器,配置拦截地址
		registry.addInterceptor(new InterceptorTest()).addPathPatterns("/**");
	}
}

// 启动阶段
-----------FilterTest1构造器---------
-----------FilterTest2构造器---------
------------FilterTest1--init-----------
------------FilterTest2--init-----------

---------AspectTest构造器----------
------InterceptorTest 构造器------

// 请求阶段
------InterceptorTest----preHandle----
---------AspectTest--before----------
------InterceptorTest----postHandle----
------InterceptorTest----afterCompletion----
------------FilterTest2--doFilter-----------
------------FilterTest1--doFilter-----------

// 停止项目
------------FilterTest1--destroy-----------
------------FilterTest2--destroy-----------

SpringBoot过滤器(Filter)、切面(Aspect)、拦截器(interceptor)

原文:https://www.cnblogs.com/yanyaqiblog/p/14007761.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!