SpringbootインターセプターHandlerInterceptorインジェクションの問題

1.問題の説明

   プロジェクトの開始後、インターセプターの下のインジェクションはnullになり、インターセプターの論理操作に影響します。以下に示すように:

第二に、ソリューション戦略

   理由:  springcontextが作成される前にインターセプターのロードが完了している詳細については、スプリングインターセプターのロードプロセスとIOCの関係を参照しください。

  解決策1:インターセプターが初期化される前に@Beanを使用してクラスをロードします。焦点は、@ Beanのインターセプター処理とgetCheckFilter()の導入です。

 詳細は次のとおりです。

// 拦截器处理
public class CheckFilter implements HandlerInterceptor {

    @Autowired
    private SystemService systemService;
}


// 配置类处理

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Bean
    public CheckFilter getCheckFilter(){
        return  new CheckFilter();
    }

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getCheckFilter()).addPathPatterns("/**").
                excludePathPatterns("/admin/auth/**");
        super.addInterceptors(registry);
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }

    @Override
    protected void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/",".jsp");
        super.configureViewResolvers(registry);
    }
}

解決策2@ Configuration、@ Componentなどの構成アノテーションをインターセプターに 追加します構成クラスに挿入します。具体的な操作は次のとおりです。

// 拦截器处理
@Configuration   //或者 @Component
public class CheckFilter implements HandlerInterceptor {

    @Autowired
    private SystemService systemService;
}


// 配置类处理

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Autowired
    private CheckFilter  checkFilter;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(checkFilter).addPathPatterns("/**").
                excludePathPatterns("/admin/auth/**");
        super.addInterceptors(registry);
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
 registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }

    @Override
    protected void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/",".jsp");
        super.configureViewResolvers(registry);
    }
}

3、知識の要約

  1.スプリングのインターセプターローディングプロセスとIOC管理を含む

  2.参考資料https://blog.csdn.net/dengdeng333/article/details/87878882

おすすめ

転載: blog.csdn.net/baidu_28068985/article/details/106659825