dromara/Sa-Token · error · NotWebContextException
非 web 上下文无法获取 HttpServletRequest
Error message
非 web 上下文无法获取 HttpServletRequest
What it means
Error "非 web 上下文无法获取 HttpServletRequest" thrown in dromara/Sa-Token.
Source
Thrown at sa-token-starter/sa-token-spring-boot-webmvc-v3v4-common/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java:42
/**
* SpringMVC 相关操作工具类,快速获取当前会话的 HttpServletRequest、HttpServletResponse 对象
*
* @author click33
* @since 1.34.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 上下文无法获取 HttpServletRequest");
}
return servletRequestAttributes.getResponse();
}
/**
* 判断当前是否处于 Web 上下文中 View on GitHub (pinned to ac2c7f6e94)
Solutions
- 仅在 Web 请求线程(如 Controller、拦截器)中调用 SpringMVCUtil.getRequest(),不要在定时任务、异步线程、启动初始化等非 Web 上下文中调用。
- 调用前先使用 SpringMVCUtil.isWeb() 判断当前是否处于 Web 上下文,非 Web 环境改用其他方式获取请求信息。
- 如果需要在异步线程中访问 request,请在 Web 线程中提前取出所需数据再传入异步任务。
When it happens
Trigger: Thrown at sa-token-starter/sa-token-spring-boot-webmvc-v3v4-common/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java:42 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/0534ec41c9763e24.
Report an issue: GitHub.