Springboot引入攔截器並放行swagger程式碼例項
阿新 • • 發佈:2020-01-07
這篇文章主要介紹了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即可,上面主要對此進行了處理。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。