分享

SSM项目中Filter使用@Autowired注入bean...

 三十的狼 2021-12-22

问题引入

今天项目中要统计在线人数与接口访问统计功能,于是准备在以前验证是否登录的filter中添加相关的统计功能,所以要在自定义的filer中注入redis操作类。
起先按照正常操作,使用@Autowired注入操作类,然后。。。就没有然后了。

问题分析

出现问题的原因是因为Web容器的初始化过程为Listener -> Filter -> Servlet,
所以在Filter初始化的时候,Spring容器中管理的类都还没初始化,自然不能完成注入。

解决方案

在之前Filter是没有交给Spring管理的,只是在web.xml中注册了Filter。
代码如下:

  <filter>
    <filter-name>authFilter</filter-name>
    <filter-class>com.diyi.filter.AuthFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>authFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
package com.diyi.filter;
public class AuthFilter implements Filter {
	//逻辑代码
	....
}

现在将Filter交给Spring管理。
代码如下:

  <filter>
    <filter-name>authFilter</filter-name>
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
      <!--   使用自定义Filter中的初始化和销毁函数 -->
      <init-param>
          <param-name>targetFilterLifecycle</param-name>
          <param-value>true</param-value>
      </init-param>
  </filter>
  <filter-mapping>
    <filter-name>authFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
package com.diyi.filter;
@Component
public class AuthFilter implements Filter {
	@Autowired
	private ParamUtil paramUtil;
	//逻辑代码
	...
}

这里我是启动了包扫描,所以使用@Component注解注入类,也可以在applicationContext.xml中使用bean标签注入类:

<bean class="com.diyi.filter.AuthFilter"/>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多