servlet filter中使用autowired無法注入


問題:

我們為了避免未經授權的人直接通過url訪問我們的頁面,配置了如下filter

  <!-- 登錄過濾器 -->
  <filter>
    <filter-name>sessionFilter</filter-name>
    <filter-class>com.sung.risk.client.filter.SessionFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sessionFilter</filter-name>
    <url-pattern>*.html</url-pattern>
  </filter-mapping>

在filter中會去驗證用戶是否攜帶了某個cookie,然后去redis查詢該cookie的值是否關聯了用戶信息,如果關聯了,則filter放過;否則返回未認證。

一開始打算注入以下服務(該服務主要進行去redis認證):

@Autowired
SessionService sessionService;

然而,事實證明,注入失敗。

我們的解決辦法:

        ServletContext context = request.getServletContext();
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
        SessionService sessionService = ctx.getBean(SessionService.class);

 

在filter上加spring的注解是無用的,只會生成兩個該filter的實例A和B(A:tomcat之類的容器管理,B為spring管理)。

A可以讀取web.xml中的配置信息,A是沒有辦法autowired的;B則可以用@autowired注入。但是我們的請求最終進入的是A,所以A中的注入的bean無效。


免責聲明!

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



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