From ce088810be0c5ed14e57f2cf4bd2d14825954315 Mon Sep 17 00:00:00 2001 From: lzy <1768422698@qq.com> Date: Tue, 17 Dec 2024 19:17:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shop/common/util/HttpContextUtils.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 yami-shop-common/src/main/java/com/yami/shop/common/util/HttpContextUtils.java diff --git a/yami-shop-common/src/main/java/com/yami/shop/common/util/HttpContextUtils.java b/yami-shop-common/src/main/java/com/yami/shop/common/util/HttpContextUtils.java new file mode 100644 index 0000000..90af9e7 --- /dev/null +++ b/yami-shop-common/src/main/java/com/yami/shop/common/util/HttpContextUtils.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.yami.shop.common.util; + +// 导入Spring相关的类,用于获取请求相关的上下文信息,基于请求上下文来获取HttpServletRequest对象 +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +// 导入Servlet相关的类,用于操作HTTP请求,这里主要是HttpServletRequest,它包含了请求相关的各种信息 +import jakarta.servlet.http.HttpServletRequest; + +/** + * HttpContextUtils工具类,主要提供了一些与HTTP请求上下文相关的便捷获取方法, + * 通过Spring的请求上下文机制来获取HttpServletRequest对象,并基于该对象进一步获取如请求域名、请求来源等相关信息, + * 方便在项目的其他地方使用这些信息进行业务逻辑处理,例如跨域处理、链接构建等场景。 + * + * @author lanhai + */ +public class HttpContextUtils { + + /** + * 获取当前线程绑定的HttpServletRequest对象。 + * 通过Spring的RequestContextHolder从请求上下文中获取ServletRequestAttributes对象, + * 再从中提取出HttpServletRequest对象。该方法是后续获取其他请求相关信息的基础。 + * + * @return HttpServletRequest 返回当前请求对应的HttpServletRequest对象, + * 如果不存在绑定的请求上下文则会抛出异常(运行时异常),调用者需要进行相应处理。 + */ + public static HttpServletRequest getHttpServletRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + /** + * 获取当前请求的域名信息。 + * 首先调用getHttpServletRequest方法获取当前的HttpServletRequest对象, + * 然后通过该对象的getRequestURL方法获取完整的请求URL(包含协议、域名、端口、路径等), + * 再利用getRequestURI方法获取请求的路径部分,通过删除URL中路径及后面的部分来得到域名相关信息(包含协议、域名、端口)。 + * + * @return String 返回当前请求的域名信息(格式类似:http://example.com:8080,具体取决于实际请求情况)。 + */ + public static String getDomain() { + HttpServletRequest request = getHttpServletRequest(); + StringBuffer url = request.getRequestURL(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); + } + + /** + * 获取当前请求的来源(Origin)信息,通常用于处理跨域相关场景。 + * 先获取当前的HttpServletRequest对象,然后通过该对象的getHeader方法获取名为"Origin"的请求头信息, + * 该请求头一般由浏览器自动添加,标识了请求的来源域名等信息,在跨域请求等场景中有重要作用。 + * + * @return String 返回当前请求的Origin信息(格式类似:http://example.com,如果有Origin请求头的话,否则返回null等情况)。 + */ + public static String getOrigin() { + HttpServletRequest request = getHttpServletRequest(); + return request.getHeader("Origin"); + } +} \ No newline at end of file