网络知识 娱乐 拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别

拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别

springboot中拦截器注册常用的方法是使用一个注册类对拦截器进行注册

需要使用到的注解有:

@Configuration

该注解用于声明该类为一个注册类

@Component

使用该注解将拦截器添加入Spring容器管理

首先拦截器类代码:

@Component

public class IndexInterceptor implements HandlerInterceptor {

@Reference(interfaceClass = UserService.class,version = "1.0.0",check = false,timeout = 15000)//使用了dubbo,可以不加

private UserService userService;


//preHandler方法实在连接到达前进行判断,false为连接拒绝,true为连接通过

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

System.out.println("====拦截器启动====");

boolean b = false;

User user = (User) request.getSession().getAttribute(Constants.SESSION_USER);

if(ObjectUtils.allNull(user)){

b = false;

}else{

User user2= userService.queryUserByPhoneAndPwd(user.getPhone(), user.getLoginPassword());

if(ObjectUtils.allNotNull(user2)){

b = true;

}else{

b=false;

}

}

System.out.println("====拦截器结束----->b="+b+"====");

return b;

}

/*

postHandler用于对拦截信息处理完毕后进行其他操作

需要perHandler方法的返回值为true时才能执行

通肠胃preHandler通过后,就会执行

*/

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);

}

/* 需要perHandler方法的返回值为true时才能执行

该方法主要用于清理资源等

它将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行后,才会运行

*/

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

HandlerInterceptor.super.afterCompletion(request, response, handler, ex);

}

}

关于拦截器类的东西就这么多,下面看看注册类如何添加:

/*

注册类中有很多方法,不止能够完成注册拦截器,还有很多其他的东西也可以实现注册

*/

@Configuration

public class InterceptorConfig implements WebMvcConfigurer {

/**

* 被拦截的路径

*/

String[] addPathPatterns = {

"/**"

};

/**

* 忽略路径

*/

String[] excludePathPatterns = {

"/index",

"/loan/**"

};

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(new IndexInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);

}

}