SrpingBoot-基础-04-拦截器
一、拦截器
SpringBoot拦截器用于拦截控制层的请求,即对url请求进行拦截,其应用场景主要有登录验证、权限验证、乱码解决、性能监控异常处理等。
二、拦截器使用步骤
①创建拦截器(实现HandlerInterceptor接口)
②注册拦截器
③设定拦截规则
1、创建拦截器
在Spring中提供了HandlerInterceptor拦截器接口,实现此类便可得到拦截器类。
它的抽象方法主要有三个:preHandle、postHandler、afterCompletion
(1)preHandle
执行在控制器方法执行之前,返回boolean类型,true表示放行,调用控制器方法,false表示拦截,不调用控制器方法
(2)postHandle
执行在控制器方法执行之后
(3)afterCompletion
执行在视图渲染完毕之后
执行顺序:preHandle —— Controller方法—— postHandle —— afterCompletion
总结:拦截器可以对Controller方法执行前后进行拦截监控
public class LoginHandlerInterceptor implements HandlerInterceptor {
//控制器方法执行前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURL = request.getRequestURL().toString();
System.out.println("requestURL:"+requestURL);
return true;
}
//控制器方法执行之后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
//视图渲染之后
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
2、注册拦截器、配置拦截规则
创建或实现WebMvcConfigurer接口配置类,需要使用@Configuration注解的类,重写里面的addInterceptors方法,将定义好的拦截器作为参数传给本方法,从而实现注册拦截器
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//SpringBoot已经做好了静态资源(*.css , *.js)映射不拦截
registry.addInterceptor(new LoginHandlerInterceptor())
//拦截所有
.addPathPatterns("/*")
}
}
调用addPathPatterns()和excludePathPatterns()指定拦截规则,其作用分别为指定拦截路径、排除拦截路径,当拦截路径“/*”表示拦截所有请求,包括对静态资源请求。
3、代码测试
@RestController
public class HelloController {
@RequestMapping("/login")
public Object login() {
Map<String,String> map=new HasdMap<>();
map.put("username","小明");
return "login";
}
}