本章导学:
- 理解什么是拦截器
- 拦截器入门案例
- 拦截器参数
一、什么是拦截器
拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法执行
作用:
- 在指定的方法调用前后执行预定的代码
- 阻止原始方法的执行
二、拦截器快速入门
新建一个拦截器去继承HandlerInterceptor接口,并把当前拦截器交给Spring管理
package com.brrbaii.reggie.utils;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class InterceptorDemo implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
}
创建一个MvcConfig去继承WebMvcConfiguration
package com.brrbaii.reggie.config;
import com.brrbaii.reggie.utils.InterceptorDemo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Slf4j
@Configuration
/**
* @author brrbaii
* @date 2022/9/24
*/
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Autowired
private InterceptorDemo interceptorDemo;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
//添加拦截器和指定拦截路径
registry.addInterceptor(interceptorDemo).addPathPatterns("/employee");
}
/**
* 请求资源过滤
* @param registry
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始进行资源映射");
log.info("开始进行静态资源映射...");
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
}
}
写一个controller的Demo去测试一下
查看结果