本文主要是介绍Spring中的拦截器HandlerInterceptor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
常识必备
拦截器与过滤器的区别
区别 | 过滤器Filter | 拦截器Interceptor |
---|---|---|
使用范围 | 是servlet规范中的一部分,任何Javaweb工程都可以使用 | 是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用 |
拦截范围 | 在url-pattern中配置了/*之后,可以对所有要访问的资源拦截 | 在url-pattern中配置了/*之后,可以对所有要访问的资源拦截 |
废话少说,直接上代码!
源码解读:HandlerInterceptor是一个接口,共有三个方法。
public interface HandlerInterceptor { //接口,可供类实现//在目标方法执行之前,执行default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true; //默认为true,返回true代表放行,false代表不放行}//在目标方法执行之后,视图对象返回之前执行default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}//在流程都执行完毕后,执行default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}
}
应用场景:自定义拦截器,权限控制
public class LoginHandlerInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//获取Session域中的用户名Object loginUser = request.getSession().getAttribute("loginUser");//如果没有登录if(loginUser==null){request.setAttribute("msg","没有权限,请先登录");//请求转发request.getRequestDispatcher("/index.html").forward(request,response);return false;}else{return true;}}
}
拦截器方法总结
方法名 | 说明 |
---|---|
preHandle() | 方法将在请求处理之前进行调用,该方法的返回值是布尔值Boolean类型的,当它返回为false时,表示请求结束,后续的Interceptor和Controller都不会再执行,当返回值为true时就会继续调用下一个Interceptor的preHandle方法 |
postHandle() | 该方法是在当前请求进行处理之后被调用,前提是preHandle方法的返回值为true时才能被调用,且它会在DispatcherServlet进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller处理之后的ModelAndView对象进行操作 |
afterCompletion() | 该方法将在整个请求结束之后,也就是在DIspatcherServlet渲染了对应的视图之后执行,前提是preHandle方法的返回值为true时才能被调用 |
本人正在打造技术交流群,欢迎志同道合的朋友一起探讨,一起努力,通过自己的努力,在技术岗位这条道路上走的更远。群号:914683950 备注:技术交流 即可通过!
这篇关于Spring中的拦截器HandlerInterceptor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!