SpringBoot 拦截器Interceptor

2022-07-01 08:38:11

1. 编写自定义拦截器

  • 编写自定义拦截器
  • 实现HandlerInterceptor接口
  • 重写接口方法preHandle、postHandle、afterCompletion

如:

publicclassCustomInterceptorimplementsHandlerInterceptor{privatestaticfinal ObjectMapper mapper=newObjectMapper();publicCustomInterceptor(){
        System.out.println("init CustomInterceptor....");}@OverridepublicbooleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{// get token
        String token= request.getHeader("token");if(!StringUtils.hasLength(token)){
            token= request.getParameter("token");}if(!StringUtils.hasLength(token)){renderResponse(response,"token not input");}// verify token
        User user= Cache.userCache.get(token);if(user!= null){//token is okreturntrue;}else{//token verify failure//write response//write responserenderResponse(response,"token verify failure");returnfalse;}}@OverridepublicvoidpostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception{
        System.out.println("CustomInterceptor postHandle");}@OverridepublicvoidafterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception{
        System.out.println("CustomInterceptor afterCompletion");}privatevoidrenderResponse(HttpServletResponse response, String json){
        response.setCharacterEncoding("utf8");
        response.setContentType("application/json");try(PrintWriter writer= response.getWriter()){
            writer.write(mapper.writeValueAsString(JsonData.buildError(json)));}catch(IOException e){
            e.printStackTrace();}}}

2. 注册拦截器

  • 自定义配置类
  • 配置类实现WebMvcConfigurer接口
  • 重写接口方法addInterceptors
  • 在addInterceptors方法中注册自定义拦截器
  • 在配置类上加@Configuration注解

如:

@ConfigurationpublicclassCustomWebMvcConfigurerimplementsWebMvcConfigurer{@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){//拦截器最后路径一定要 /**  如果是目录的话则是 /*/
        registry.addInterceptor(getCustomInterceptor()).addPathPatterns("/api/v1/pri/**");//register
        WebMvcConfigurer.super.addInterceptors(registry);}/**
     * put CustomInterceptor into ioc
     * @return
     */@Beanpublic CustomInterceptorgetCustomInterceptor(){returnnewCustomInterceptor();}}
  • 作者:咕咕@
  • 原文链接:https://blog.csdn.net/qq_40887840/article/details/123372763
    更新时间:2022-07-01 08:38:11