1. 程式人生 > 程式設計 >Springboot引入攔截器並放行swagger程式碼例項

Springboot引入攔截器並放行swagger程式碼例項

這篇文章主要介紹了Springboot引入攔截器並放行swagger程式碼例項,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Springboot引入攔截器

自定義的攔截器類 Interceptor

package cn.zytao.taosir.auth.config;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class AuthInterceptor implements HandlerInterceptor{
  
  /**
   * 請求處理之後
   */
  @Override
  public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex)
      throws Exception {
    // TODO Auto-generated method stub
    HandlerInterceptor.super.afterCompletion(request,response,handler,ex);
  }

  /**
   * 請求處理之後呼叫
   */
  @Override
  public void postHandle(HttpServletRequest request,ModelAndView modelAndView) throws Exception {
    // TODO Auto-generated method stub
    HandlerInterceptor.super.postHandle(request,modelAndView);
  }

  /**
   * 請求處理之前
   */
  @Override
  public boolean preHandle(HttpServletRequest request,Object handler)
      throws Exception {
    return HandlerInterceptor.super.preHandle(request,handler);
  }
}

將攔截器新增到springmvc配置中,並放行swagger的相關資源

package cn.zytao.taosir.auth.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class SpringMVCConfig extends WebMvcConfigurationSupport{
  @Bean
  public AuthInterceptor getAuthInterceptor() {
    return new AuthInterceptor();
  }
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry
    .addInterceptor(getAuthInterceptor())
    .addPathPatterns("/**")
    .excludePathPatterns("/login")
    .excludePathPatterns("/swagger-resources/**","/webjars/**","/v2/**","/swagger-ui.html/**");
    super.addInterceptors(registry);
  }
  @Override
  protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("swagger-ui.html")
    .addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**")
    .addResourceLocations("classpath:/META-INF/resources/webjars/");
    super.addResourceHandlers(registry);
  }
}

在addInterceptors方法中新增攔截器時,是new的一個攔截器。而並不是引入springBean容器初始化時,已經初始化好了的bean例項,並不是同一個物件,故而訪問時肯定是無法引入Interceptor類裡面引入的bean例項,可能產生空指標異常。

即無法引入預設注入的Bean,那麼我們就自己定義一個Bean,然後在攔截器新增方法內引入這個bean即可,上面主要對此進行了處理。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。