实现思路:
1.编写类实现HandlerInterceptor接口
2.重写接口中的方法
PreHandler: // 在被拦截资源(方法)前执行
返回值:true :放行
false:拦截
Posthandler // 在被拦截资源(方法)后执行
afterCompletion // 在Posthandler方法后执行
释放资源
3.配置拦截类
配置通过WebMvcConfiguration的实现类配置拦截器类(配置要拦截的资源)
/**
* 权限检查拦截器
* 定义一个权限类实现HandlerInterceptor接口,重写3个方法
*/
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
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 GameInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
HandlerMethod method = (HandlerMethod) handler;
//获取执行的类名
String className = method.getBeanType().getName();
//获取执行的方法名
String methodName = method.getMethod().getName();
System.out.println(className+":"+methodName+",开始执行时间为:"+System.currentTimeMillis());
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
// HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
System.out.println("被拦截的资源执行后执行的方法");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerMethod method = (HandlerMethod) handler;
//获取执行的类名
String className = method.getBeanType().getName();
//获取执行的方法名
String methodName = method.getMethod().getName();
System.out.println(className+":"+methodName+",执行结束时间为:"+System.currentTimeMillis());
}
}
这里是引用
SpringMVC拦截器配置
@Configuration
@ComponentScan({"com.demo.interceptor"}) // 扫描拦截器类所在的包
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
}
配置拦截器类
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Override
/**
* 配置要拦截的资源
*/
protected void addInterceptors(InterceptorRegistry registry) {
//设置拦截的规则为 /game/**
// addPathPatterns("/game/**","/brand")
registry.addInterceptor(new GameInterceptor()).addPathPatterns("/game/**","/game");
}
}