dromara/Sa-Token · error · NotWebContextException

非 web 上下文无法获取 HttpServletRequest

Error message

非 web 上下文无法获取 HttpServletRequest

What it means

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

Solutions

  1. 仅在 Web 请求线程(如 Controller、拦截器)中调用 SpringMVCUtil.getRequest(),不要在定时任务、异步线程、启动初始化等非 Web 上下文中调用。
  2. 调用前先使用 SpringMVCUtil.isWeb() 判断当前是否处于 Web 上下文,非 Web 环境改用其他方式获取请求信息。
  3. 如果需要在异步线程中访问 request,请在 Web 线程中提前取出所需数据再传入异步任务。

When it happens

Trigger: Thrown at sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java:43 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/14c288a2399e138f. Report an issue: GitHub.

Appendix: source

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

/**
 * SpringMVC 相关操作工具类,快速获取当前会话的 HttpServletRequest、HttpServletResponse 对象
 *
 * @author click33
 * @since 1.19.0
 */
public class SpringMVCUtil {
	
	private SpringMVCUtil() {
	}
	
	/**
	 * 获取当前会话的 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 上下文中  

View on GitHub (pinned to ac2c7f6e94)