SpringMVC笔记6---拦截器Interceptor

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.


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值