SpringMVC笔记6---拦截器Interceptor
2018-01-02 15:28
597 查看
SpringMVC请求处理流程如下图:
DispatcherServlet和Controller之间那些彩色矩形条,是拦截请求进行额外处理的环节。
SpringMVC中的拦截器是实现了HandlerInterceptor接口的Bean,该接口原型如下:
public interface HandlerInterceptor {
boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception;
void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception;
void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler, Exception ex) throws Exception;
}
HandlerInterceptorAdapter类是实现了HandlerInterceptor的类,它的三个实现方法都为空,通常我们会继承HandlerInterceptorAdapter来实现自己的拦截器。下面将详细描述如何创建拦截器。
1 新建拦截器类MyInterceptor:
package com.gm.springmvc_test.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class MyInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 在controller方法调用前打印信息
System.out.println("This is interceptor.");
// 返回true,将强求继续传递(传递到下一个拦截器,没有其它拦截器了,则传递给Controller)
return true;
}
}
2 配置拦截器到SpringMVC中,新建配置类WebConf:package com.gm.springmvc_test.conf;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.gm.springmvc_test.controller.MyInterceptor;
@Configuration
public class WebConf extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
}
通过@Configuration注解申明这个一个配置类。通过InterceptorRegistry.addInterceptor方法来注册一个拦截器,上例中的拦截器将对所有的URL进行拦截,如果想要拦截指定的URL,则可以使用这种方法:registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/index/**");
addPathPatterns("/**") 表示将对所有的URL进行拦截,excludePathPatterns表示将不对"/index/**"类型的URL进行拦截,即当浏览器中输入localhost:8080/index时,拦截器将不会对本次请求进行拦截。
3 在浏览器中输入localhost:8080,将看到在Eclipse中的Console窗口中输出This is interceptor.
DispatcherServlet和Controller之间那些彩色矩形条,是拦截请求进行额外处理的环节。
SpringMVC中的拦截器是实现了HandlerInterceptor接口的Bean,该接口原型如下:
public interface HandlerInterceptor {
boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception;
void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception;
void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler, Exception ex) throws Exception;
}
HandlerInterceptorAdapter类是实现了HandlerInterceptor的类,它的三个实现方法都为空,通常我们会继承HandlerInterceptorAdapter来实现自己的拦截器。下面将详细描述如何创建拦截器。
1 新建拦截器类MyInterceptor:
package com.gm.springmvc_test.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class MyInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 在controller方法调用前打印信息
System.out.println("This is interceptor.");
// 返回true,将强求继续传递(传递到下一个拦截器,没有其它拦截器了,则传递给Controller)
return true;
}
}
2 配置拦截器到SpringMVC中,新建配置类WebConf:package com.gm.springmvc_test.conf;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.gm.springmvc_test.controller.MyInterceptor;
@Configuration
public class WebConf extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
}
通过@Configuration注解申明这个一个配置类。通过InterceptorRegistry.addInterceptor方法来注册一个拦截器,上例中的拦截器将对所有的URL进行拦截,如果想要拦截指定的URL,则可以使用这种方法:registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/index/**");
addPathPatterns("/**") 表示将对所有的URL进行拦截,excludePathPatterns表示将不对"/index/**"类型的URL进行拦截,即当浏览器中输入localhost:8080/index时,拦截器将不会对本次请求进行拦截。
3 在浏览器中输入localhost:8080,将看到在Eclipse中的Console窗口中输出This is interceptor.
相关文章推荐
- Springmvc第三讲学习笔记,拦截器Interceptor的使用
- SpringMVC 静态资源&拦截器(interceptor and static resource) 笔记(七)
- SpringMVC 中的Interceptor 拦截器
- springmvc 拦截器interceptor
- Spring 学习笔记(11)—— SpringMVC 拦截器
- 关于Jquery版本的Ajax和SpringMVC拦截器(Interceptor)
- SpringMVC之interceptor拦截器
- springmvc——拦截器Interceptor
- SpringMvc 拦截器 Interceptor的基础知识
- Java过滤器与SpringMVC拦截器的差异学习笔记
- Spring MVC 中 HandlerInterceptorAdapter的使用[SpringMVC中请求拦截器的实现]
- SpringMVC拦截器Interceptor
- struts2第十三讲学习笔记,拦截器interceptor的详细讲解
- SpringMVC学习笔记2_拦截器实现登录验证
- SpringMVC 拦截器Interceptor的使用
- SpringMVC拦截器(包括自定以拦截器--实现HandlerInterceptorAdapter)(资源和权限管理)
- SpringMvc拦截器HandlerInterceptorAdapter
- SpringMVC拦截器Interceptor
- SpringMVC 学习笔记(九) 自定义拦截器
- SpringMVC的拦截器Interceptor