spring拦截器
拦截器如何使用
自定义拦截器,实现HandlerInterceptor接口,并且重写接口的方法。
三个方法
preHandle 再进入后端控制器方法前辈调用
postHandle 控制器方法调用结束后,被调用
afterCompletion 所有的流程结束后,被调用,通产个用来异常处理
public class LogInterceptor implements HandlerInterceptor {
private Logger logger = Logger.getLogger(LogInterceptor.class);
/**
* 在进入控制器方法前被调用的方法
*
* @param request 请求对象
* @param response 响应对象
* @param handler 被拦截的控制器方法
* @return true表示允许访问, false表示终止访问. 如果返回false, 需要提示客户端
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.error("[日志拦截: 1] - preHandle - 控制器被调用前执行 - " + handler);
return true;
}
/**
* 控制器方法调用结束, 有返回结果之后, 调用postHandle方法
*
* @param request 请求对象
* @param response 响应对象
* @param handler 控制器方法
* @param modelAndView 控制器方法返回的结果
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.error("[日志拦截: 2] - postHandle - 控制器调用后执行 - " + handler);
}
/**
* 本次流程结束后会被调用的方法, 通常用于最终的异常处理
*
* @param request 请求对象
* @param response 响应对象
* @param handler 控制器方法
* @param ex 异常对象
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.error("[日志拦截: 3] - afterCompletion - 流程结束 - " + handler);
}
}
//拦截范围控制
@Configuration
@AllArgsConstructor
public class InterceptorConfig implements WebMvcConfigurer {
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/api/v1/cas/**")
.excludePathPatterns("/api/v1/test/**");
}
}
自定义参数注解
实现类HandlerMethodArgumentResolver,重写方法