阿毛
It's me !
想你所想

HttpServletRequest 获取请求相关信息

SpringBoot 中可以通过 HttpServletRequest 去获取改次请求的相关信息,如请求 url、请求头数据、客户端请求 ip 及端口等。
(javax.servlet.http.HttpServletRequest)

例:218.93.204.35 通过 62251 端口发起请求 http://humh.cn:9080/community_data_event/cv/h5/tracking ,这个请求会指向 k8s 集群内的 community-data-event 这个 pod。

该 pod 内部 ip 为 10.244.4.177,java 服务内部启动端口号 8090。部分日志及相关信息如下

2023-11-10 14:42:00.657|INFO|nio-8090-exec-4|c.c.w.c.w.i.RequestLogInterceptor|doLog|44|from_service=app,client_ip=218.93.204.35,romote_ip=218.93.204.35,net_state=wifi| request:{url=/community_data_event/cv/h5/tracking, params={}}
https://file.blog.humh.cn/wp-content/uploads/2023/11/20231110171832599-1024x209.png

特别说明:

此次请求其实原本是 218.93.204.35 通过 62251 端口发起请求 http://humh.cn/webapi/h5/tracking ,humh.cn 会指向到 apisix,9080 为 apisix 网关默认端口。而 apisix 上预配置了规则 /webapi/h5/tracking 这个路径会静态改写到 /community_data_event/cv/h5/tracking ,改写后路径会路由到 community-data-event 这个 pod。而静态改写属于 apisix 内部完成逻辑,此时请求还未到服务器,所以真正发往服务器的请求是 http://humh.cn:9080/community_data_event/cv/h5/tracking,而不是最开始的  http://humh.cn/webapi/h5/tracking 。

基于上面这个例子,下面是部分方法释义(community-data-event 此 java pod 内调用)

方法名作用示例
getScheme获取当前请求协议名,如 http、httpshttp
getServerName获取当前服务器主机名,如当前服务域名humh.cn
getServerPort获取当前服务器端口号,如当前服务端口9080
getServletPath获取当前请求 URL 中对应 servlet 部分,即 controller 上 @RequestMapping 中 path/community_data_event/cv/h5/tracking
getRequestURI获取当前请求 URL 中“协议名://域名”后的子串部分/community_data_event/cv/h5/tracking
getLocalName获取当前服务内部主机名localhost
getLocalAddr获取当前服务内部 ip 地址10.244.4.177
getLocalPort获取当前服务内部端口号8090
getRemoteHost获取发起请求的远端主机 ip,即发起请求的客户端 ip218.93.204.35
getRemotePort获取发起请求的远端主机端口号,即发起请求的客户端端口号62251

humh

文章作者

站长本人,一个憨批!

发表回复

textsms
account_circle
email

想你所想

HttpServletRequest 获取请求相关信息
SpringBoot 中可以通过 HttpServletRequest 去获取改次请求的相关信息,如请求 url、请求头数据、客户端请求 ip 及端口等。(javax.servlet.http.HttpServletRequest) 例:218.9…
扫描二维码继续阅读
2023-11-10