代码:
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;