如何在SpringBoot的 過濾器之中注入Bean對象


我建立一個全局攔截器,此攔截器主要用於攔截APP用戶登錄和請求API時候,必須加密,我把它命名為SecurityFilter,它繼承了Filter,web應用啟動的順序是:listener->filter->servlet,

而因為項目應用了SpringBoot,所以我們項目啟動時,先初始化listener,因此注解的bean會被初始化和注入;然后再來就filter的初始化,再接着才到我們的dispathServlet的初始化,因此,當我們需要在filter里注入一個注解的bean時,就會注入失敗,因為filter初始化時,注解的bean還沒初始化,沒法注入。

那么,解決方法如下:

    @Bean
    public FilterRegistrationBean securityFilterRegistration() {
            FilterRegistrationBean registration = new FilterRegistrationBean();        
        DelegatingFilterProxy httpBasicFilter = new DelegatingFilterProxy();
        registration.setFilter(httpBasicFilter);
        Map<String,String> m = new HashMap<String,String>();
        m.put("targetBeanName","securityFilter");
        m.put("targetFilterLifecycle","true");
        registration.setInitParameters(m);           
        registration.addUrlPatterns("/appapi/*");
     
        registration.setOrder(2);
        return registration;
    }

這樣你就可以在securityFilter 里面添加@Autowired下的bean了。

    @Autowired
    private PermissionUserService userService;

以上事項方式會全局過濾,此過濾不起作用適合於全局過濾(/*);

registration.addUrlPatterns("/appapi/*");

建議使用如下方式

    @Bean
    public FilterRegistrationBean securityFilterRegistration() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            registrationBean.setFilter(securityFilterBean());
            registrationBean.addUrlPatterns("/appapi/*");
            registrationBean.setName("securityFilter");
            registrationBean.setOrder(2);
            return registrationBean;
        }
        
    @Bean
    public Filter securityFilterBean() {
     return new SecurityFilter();
    }

參考文章:

https://blog.csdn.net/xiaoyi52/article/details/76686001

https://blog.csdn.net/cutterwolf/article/details/77849158

https://blog.csdn.net/u013076044/article/details/72903130

https://blog.csdn.net/angel708884645/article/details/51148865

如何在servlet取得spring beans (autowired)

https://blog.csdn.net/axzywan/article/details/8056892

非spring組件servlet、filter、interceptor中注入spring bean

https://www.cnblogs.com/duanxz/p/5463230.html
---------------------
版權聲明:本文為CSDN博主「蜀山雪松」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jianxia801/article/details/79807917


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM