不登录不能访问的过滤器中,使用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中的配置
在这里插入图片描述

参考资源链接:[dispatcherServlet服务异常:NullPointerException](https://wenku.csdn.net/doc/6401abeecce7214c316ea04d?utm_source=wenku_answer2doc_content) 首先,对于在使用dispatcherServlet处理请求遇到的NullPointerException,这是一个典型的Java空指针异常,通常指向某个对象未被正确初始化或初始化后被错误修改。为了定位和解决问题,可以按照以下步骤进行: 1. **查看异常堆栈信息**:异常堆栈会指出发生异常的确切位置。检查堆栈信息提供的行号和方法,这是定位问题源头的关键。 2. **检查代码逻辑**:在异常堆栈指定的代码位置,检查所有可能返回null的变量。比如,如果有方法调用可能导致某个对象为null,则需要添加null检查,确保在使用这些对象之前已经进行了有效的初始化。 3. **验证依赖注入**:在Spring框架,确保所有依赖的对象都通过Spring容器正确管理。检查相关的bean是否被正确配置,特别是检查是否有一些必要的bean未能正确注入到dispatcherServlet或其相关组件。 4. **分析服务调用链路**:如果异常与服务调用有关(如日志提到的Dubbo),则需要分析服务调用链路,确认调用的服务是否存在,网络是否畅通,以及服务提供者是否正常运行。此外,确保服务消费者的配置与服务提供者的接口版本一致。 5. **添加日志记录**:在可疑代码段周围添加日志记录,特别是在对象使用之前。这样可以更准确地追踪到异常发生各个对象的状态。 6. **使用调试工具**:使用IDE的调试工具进行逐步调试,观察在异常发生对象的实际情况,这可以帮助更直观地发现未初始化或错误处理的对象。 通过以上步骤,你可以系统地定位并解决dispatcherServletNullPointerException问题。此外,为了更深入理解Spring MVC的工作原理及异常处理机制,建议阅读相关的专业书籍和文档,如《dispatcherServlet服务异常:NullPointerException》。这份资料能够提供更详尽的指导和分析,帮助你全面理解问题的本质,并掌握解决类似问题的方法。 参考资源链接:[dispatcherServlet服务异常:NullPointerException](https://wenku.csdn.net/doc/6401abeecce7214c316ea04d?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值