首页 > 代码库 > SpringMvc中使用Interceptor与Filter的注意点
SpringMvc中使用Interceptor与Filter的注意点
以下内容为自己的理解,如果有错误的地方,欢迎指正。
Filter配置在web.xml,而Interceptor配置spring-mvc.xml中,如果项目中同时使用了Filter与Interceptor,则会先执行Filter。
1、Filter中不能直接获取spring中的service,简单测试代码如下:
public class TestFilter implements Filter{ TestService testService; @Override public void init(FilterConfig filterConfig) throws ServletException { ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext()); //获取spring中的service testService = (TestService)applicationContext.getBean("testService"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { } @Override public void destroy() { }}
如果,如果要调用TestService中的方法,需要在Filter初始化时获取。
2、Interceptor中可以直接使用注解获取spring中的bean,简单测试代码如下:
1 public class TestInterceptor implements HandlerInterceptor{ 2 3 @Resource 4 ItemsServiceImpl a; 5 @Override 6 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 7 throws Exception { 8 System.out.println("执行了preHandle方法"); 9 String rt = a.say();10 System.out.println(rt+"interceptor");11 return true;12 }13 14 @Override15 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,16 ModelAndView modelAndView) throws Exception {17 System.out.println("执行了postHandle方法");18 }19 20 @Override21 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)22 throws Exception {23 System.out.println("执行了afterCompletion方法");24 }25 26 }
preHandle方法在执行完Filter(如果项目配置了Filter的话)之后,执行Controller方法之前执行,如果返回false,则后面的Controller方法以及postHandle方法都不会执行。
postHandle方法在执行完Controller方法之后,返回ModelAndView之前执行,此时可以修改ModelAndView中的属性。
afterCompletion方法在postHandle之后执行,通常执行一些资源的清理。
=====遇到有需要的在编辑=====
SpringMvc中使用Interceptor与Filter的注意点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。