- 实现HandlerInterceptor,重写3个方法并向spring容器添加组件
package com.mqb.springboot02.interceptor;
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 MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandler");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
}
- 配置拦截器
package com.mqb.springboot02.config;
import com.mqb.springboot02.interceptor.MyInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.ArrayList;
@Configuration
public class MyWebMvc extends WebMvcConfigurationSupport {
@Autowired
MyInterceptor myInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration interceptor = registry.addInterceptor(myInterceptor);
//第一种方式
interceptor.addPathPatterns("/login");
//第二种方式
ArrayList list = new ArrayList<>();
list.add("/login2");
interceptor.addPathPatterns(list);
//这个请求不被拦截
interceptor.excludePathPatterns("/logout");
}
}
- 编写controller测试
package com.mqb.springboot02.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/login")
public void login(){
System.out.println("进入到Controller的login方法");
}
@RequestMapping("/login2")
public void login2(){
System.out.println("进入到Controller的login2方法");
}
@RequestMapping("/logout")
public void logout(){
System.out.println("进入到Controller的logout方法");
}
}
- 启动主程序后,打开浏览器分别访问/login,/login2,/logout,看控制台输出