dromara/Sa-Token · error · NotWebContextException

非 web 上下文无法获取 HttpServletResponse

Error message

非 web 上下文无法获取 HttpServletResponse

What it means

Error "非 web 上下文无法获取 HttpServletResponse" thrown in dromara/Sa-Token.

Source

Thrown at sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java:55

	 * 获取当前会话的 request 对象
	 * @return request
	 */
	public static HttpServletRequest getRequest() {
		ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
		if(servletRequestAttributes == null) {
			throw new NotWebContextException("非 web 上下文无法获取 HttpServletRequest");
		}
		return servletRequestAttributes.getRequest();
	}
	
	/**
	 * 获取当前会话的 response 对象
	 * @return response
	 */
	public static HttpServletResponse getResponse() {
		ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
		if(servletRequestAttributes == null) {
			throw new NotWebContextException("非 web 上下文无法获取 HttpServletResponse");
		}
		return servletRequestAttributes.getResponse();
	}

	/**
	 * 判断当前是否处于 Web 上下文中  
	 * @return /
	 */
	public static boolean isWeb() {
		return RequestContextHolder.getRequestAttributes() != null;
	}
	
}

View on GitHub (pinned to ac2c7f6e94)

Solutions

  1. 仅在 Web 请求线程(如 Controller、拦截器)中调用 SpringMVCUtil.getResponse(),不要在定时任务、异步线程、启动初始化等非 Web 上下文中调用。
  2. 调用前先使用 SpringMVCUtil.isWeb() 判断当前是否处于 Web 上下文。
  3. 如需在非 Web 场景输出数据,改用日志、消息队列等方式,而非直接操作 HttpServletResponse。

When it happens

Trigger: Thrown at sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java:55 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of dromara/Sa-Token@ac2c7f6e94 (2026-08-14). Data as JSON: /api/errors/8925cc8759cf65ca. Report an issue: GitHub.