报错: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中的配置