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();
}
}