You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:42:06