{"record":{"id":"14c288a2399e138f","repo":"dromara/Sa-Token","slug":"web-httpservletrequest","errorCode":null,"errorMessage":"非 web 上下文无法获取 HttpServletRequest","messagePattern":"非 web 上下文无法获取 HttpServletRequest","errorType":"exception","errorClass":"NotWebContextException","httpStatus":null,"severity":"error","filePath":"sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java","lineNumber":43,"sourceCode":"/**\n * SpringMVC 相关操作工具类，快速获取当前会话的 HttpServletRequest、HttpServletResponse 对象\n *\n * @author click33\n * @since 1.19.0\n */\npublic class SpringMVCUtil {\n\t\n\tprivate SpringMVCUtil() {\n\t}\n\t\n\t/**\n\t * 获取当前会话的 request 对象\n\t * @return request\n\t */\n\tpublic static HttpServletRequest getRequest() {\n\t\tServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();\n\t\tif(servletRequestAttributes == null) {\n\t\t\tthrow new NotWebContextException(\"非 web 上下文无法获取 HttpServletRequest\");\n\t\t}\n\t\treturn servletRequestAttributes.getRequest();\n\t}\n\t\n\t/**\n\t * 获取当前会话的 response 对象\n\t * @return response\n\t */\n\tpublic static HttpServletResponse getResponse() {\n\t\tServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();\n\t\tif(servletRequestAttributes == null) {\n\t\t\tthrow new NotWebContextException(\"非 web 上下文无法获取 HttpServletResponse\");\n\t\t}\n\t\treturn servletRequestAttributes.getResponse();\n\t}\n\n\t/**\n\t * 判断当前是否处于 Web 上下文中  ","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/dromara/Sa-Token/blob/ac2c7f6e94a78573cf0bcb932dd8b04e68fad189/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SpringMVCUtil.java#L25-L61","documentation":"Error \"非 web 上下文无法获取 HttpServletRequest\" thrown in dromara/Sa-Token.","triggerScenarios":"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.","commonSituations":"See trigger scenarios.","solutions":["仅在 Web 请求线程（如 Controller、拦截器）中调用 SpringMVCUtil.getRequest()，不要在定时任务、异步线程、启动初始化等非 Web 上下文中调用。","调用前先使用 SpringMVCUtil.isWeb() 判断当前是否处于 Web 上下文，非 Web 环境改用其他方式获取请求信息。","如果需要在异步线程中访问 request，请在 Web 线程中提前取出所需数据再传入异步任务。"],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"ac2c7f6e94a78573cf0bcb932dd8b04e68fad189","analyzedAt":"2026-08-14T14:36:10.271Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}