Spring Boot中CommonServiceImpl移除Session的空指针问题求助
解决Spring Boot中RequestContextHolder.getRequestAttributes()引发的空指针风险问题
你的代码问题出在直接对RequestContextHolder.getRequestAttributes()做强制类型转换——这个方法在非HTTP请求场景(比如定时任务、异步方法)下会返回null,此时强转HttpServletRequest会直接触发空指针异常,后续的session判空逻辑根本无法执行。
修正方案需要层层做非空校验和类型校验,确保每一步都安全:
@Service public class CommonServiceImpl implements CommonService { public void removeSessionMessages() { // 先获取请求属性,第一步判空 RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); // 校验是否为HttpServletRequest类型,同时完成非空判断 if (requestAttributes instanceof HttpServletRequest) { HttpServletRequest request = (HttpServletRequest) requestAttributes; // 使用false参数:不存在session时返回null,不创建新session HttpSession session = request.getSession(false); if (session != null) { session.removeAttribute("succMsg"); session.removeAttribute("errorMsg"); } } } }
关键细节说明:
RequestContextHolder.getRequestAttributes():仅在当前线程绑定了HTTP请求上下文时才会返回有效值,非web场景下为null,必须先判空instanceof关键字:同时完成非空判断和类型校验,避免类型转换异常request.getSession(false):相比默认的getSession(),不会在没有session时创建新的,减少不必要的资源消耗
内容的提问来源于stack exchange,提问作者Khushi Saraswat
相关产品推荐
相关产品推荐

