不登录不能访问的过滤器中,使用spring容器中的jedisPool时,注入时报NullPointerException的问题

报错:java.lang.NullPointerException
at com.itljl.controller.filter.LoginFilter.doFilter(LoginFilter.java:74)

报错原因:在过滤器中注入jedisPool时,出现注入失败的情况,导致使用jedisPool时报出来的空指针异常。由于spring容器的加载时机要要晚于过滤器,所有引用时还没有加载spring容器中的对象,导致注入失败。

解决方案:提前加载spring-redis.xml这个配置文件,在过滤器初始化时,使用应用上下文对象去加载spring容器中的对象,再注入即可使用。
例如:

1.在web.xml中设置加载配置文件

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:spring*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

在这里插入图片描述
2.web.xml中配置过滤器

<filter>
		<filter-name>LoginFilter</filter-name>
		<filter-class>com.itljl.controller.filter.LoginFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>LoginFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

3.在过滤器的init方法中使用应用上下文对象加载jedisPool对象

 public void init(FilterConfig filterConfig) throws ServletException {
        ServletContext servletContext = filterConfig.getServletContext();
        ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
        jedisPool = (JedisPool) context.getBean("jedisPool");
    }

在这里插入图片描述
spring-redis中的配置
在这里插入图片描述


版权声明:本文为m0_50201959原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。