您的位置:首页 > 编程语言 > Java开发

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Interceptor