拦截器Autowired注入服务(工具类)空指针

本文介绍了在Java拦截器中遇到@Autowired注解注入服务出现空指针异常的问题,通过在特定位置添加代码成功解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.cache.CacheUtil;

/**
 * 类名: ValidateInterceptor
 * 描述: 校验拦截器
 */
public class ValidateInterceptor implements HandlerInterceptor {

	private static UnLogger logger = UnLogger.getLogger(ValidateInterceptor.class);
	
	@Autowired
	CacheUtil cacheUtil;
	
	@Override
	public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
		boolean checkResult=true;
		//指定允许其他域名访问  
		response.addHeader("Access-Control-Allow-Origin", "*");
		//响应类型  响应方法
		response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); 
		response.setHeader("Access-Control-Allow-Headers", "Content-Type");  
		response.addHeader("Access-Control-Max-Age", "30");   
                //省略
		String token = request.getParameter("token");
                //位置1
		//校验
		if(StringUtils.isNotEmpty(token)){
			try{
				if(StringUtils.isNotEmpty(cacheUtil.get(token))){ //报错,空指针异常
					cacheUtil.expire(token, Constant.TOKEN_EFFECTIVE_TIME);
					checkResult = true;
				}
			}catch(Exception e){
				logger.error("redis异常!");
				e.printStackTrace();
				sessionVerify(request, response, checkResult);
			}
		}else{
			sessionVerify(request, response, checkResult);
		}
		return checkResult;
	}
        //省略
}

 

解决办法,在位置1加上下面的代码就可以了:

 

//注入失败
if(cacheClusterUtil == null){
	WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
	cacheUtil = wac.getBean(CacheUtil.class);
}
引入:
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值