SpringBoot配置拦截器
最近自己新搭了个boot服务,尝试自己完成一个小的项目,第一步就是配置个拦截器,校验用户权限
@Component
public class LogInInterceptor 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 {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
定义一个拦截器,注意@Component注解,不然初始化可能找不到
然后定义一个拦截器的启动配置
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Autowired
private LogInInterceptor logInInterceptor;
/*@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInInterceptor).addPathPatterns("/**").excludePathPatterns("/loginIn");
}*/
// 这个方法是用来注册拦截器,我们自己写好的拦截器是需要添加注册才能生效
@Override
public void addInterceptors(InterceptorRegistry registry) {
//.addPathPatterns("/**") 拦截所有请求
registry.addInterceptor(logInInterceptor).addPathPatterns("/**")
.excludePathPatterns("/login");
super.addInterceptors(registry);
}
}
@Configuration注解不能缺少,将java文件作为spring的配置文件.
addPathPatterns为拦截的路径,excludePathPatterns为路径白名单.既然是登录拦截 就将login放开.
preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView ;
afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);
简单而言:preHandle、postHandle、afterCompletion分别在方法调用前、调用时、调用后执行