Restful 拦截

过滤器

能够拿到原始的请求和响应信息
1. 实现 javax.servlet.Filter
2. 声明为@Component
3. 添加第三方过滤器配置到上下文环境中

@Configuration 定义一个配置类

	@Configuration
	public class WebConfig{
		FilterRegistrationBean registrationBean = new FilterRegistrationBean();
		timeFilter timeFilter = new TimeFilter();
		registrationBean.setFilter(timeFilter);
		//声明过滤器生效的URL
		List<String> url = Lists.newInstance();
		url.add("/*");
		registrationBean.setPatternUrl(url);
		
	}		

拦截器

能够拿到原始的请求和响应信息,还有处理响应的方法的名字
1. 实现HandlerInterceptor
2. 声明为@Component
3. 配置拦截器配置器
	
	@Component
	public class TimeInterceptor implements HandlerInterceptor{
		@Override
		public boolean preHandle(HtppServletRequest request,HttpServletResponse response,Object handle) throws Exception{
			//拦截前动作
			((HandleMethod)handle).getBean().getClass().getName();//获取被拦截的类
			((HandleMethod)handle).getMethod().getName();//获取被拦截的方法名
			return false;
		}
		
		@Override
		public void postHandle(HtppServletRequest request,HttpServletResponse response,Object handle, ModelAndView modelAndView) throws Exception{
			//拦截时,拦截动作主要执行地方
		}
	
		@Override
		public void afterCompletion(HtppServletRequest request,HttpServletResponse response,Object handle,Exception ex) throws Exception{
			//所有拦截结束后都会执行的一个方法
		}
	}


	@Configuration
	public class WebConfig extends WebMvcConfigurerAdapter{
		@AutoWired
		private TimeInterceptor timeInterceptor;
		
		@Override
		public void addInterceptors(InterceptorRegistry registry){
			registry.addInterceptor(timeInterceptor);
		}
		
	}

AOP

能够拿到方法真正调用时候的传参的值,但是拿不到原始的Http请求和响应
1. 声明切点
2. 声明切点生效时执行的方法
	@Aspect //这是一个AOP类
	@Component //这是一个Spring 管理的Bean
	public class TimeAspect{
		//声明切面 top.miaojun.controller.UserController下的所有方法生效
		@Around("execution(* top.miaojun.controller.UserController.*(..))")
		public Object handleControllerMethod(ProceedingJoinPoint pjp){
			//主要执行的方法
			Object object = pjp.proceed();
		}
	}

Restful 拦截