图示

模拟没有登录拦截操作
新定义拦截器
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("登录拦截操作");
String username = request.getParameter("username");
if("sy".equals(username)){
return true;
}
System.out.println("preHandle");
return false;
}
@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");
}
}
修改SpringMvc 配置
@Configuration
@ComponentScan({"cn.sycoder.controller","cn.sycoder.interceptor"})
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
@Autowired
LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/item","/item/*");
}
}
controller 确实被拦截
@RestController
@RequestMapping("/item")
public class ItemController {
@GetMapping("/{id}")
public String getById(@PathVariable Long id){
return "query"+id;
}
@GetMapping
public String list(){
return "list";
}
}
新增拦截器
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("权限拦截的方法");
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方法");
}
}
添加到拦截器链中
@Configuration
@ComponentScan({"cn.sycoder.controller","cn.sycoder.interceptor"})
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
@Autowired
LoginInterceptor loginInterceptor;
@Autowired
AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/item","/item/*");
registry.addInterceptor(authInterceptor).addPathPatterns("/item","/item/*");
}
}
拦截器链注意点
区别
访问流程
