Spring boot 获取正确的IP和协议[http/https]

       在使用spring boot服务的时候,一般都会加反向代理,这时候并不能正确获取真实的IP,网上解决方案说的比较明确,都可以解决问题。很少有人会问如何获取http/https,因为很少人用程序获取真实的访问路径,可能都把地址加到配置文件里了。

       nginx的配置

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
proxy_set_header X-Forwarded-Proto  $scheme;

       第四个配置是帮助spring boot获取正确协议头的配置。 同时也需要在application.yml里加增加一个配置,当然如果你直接从头上获取,也可以不增加配置。

server:
  forward-headers-strategy: native

参数是native和framework两者选择,当然还有none不做考虑。framework的话可以自己增加一个过滤器进行header的处理。

以上处理适合spring boot 2.2后的版本。

Spring Boot应用程序中,获取客户端的IP地址MAC地址通常可以通过以下步骤: 1. **获取IP地址**: - 使用`HttpServletRequest`对象的`getRemoteAddr()`方法可以得到远程客户端的IP地址。这个值通常是通过网络路由获得的,可能会受到代理服务器的影响。 ```java String ipAddress = request.getRemoteAddr(); ``` 2. **获取用户的真实IP地址(如果需要穿透代理)**: - 如果你想获取更准确的IP地址,比如通过X-Forwarded-For头或者X-Real-IP头来处理代理请求,可以使用`HttpServletRequestWrapper`或者第三方库如`RestTemplate`的`ExtractRequestUtils`。 ```java String realIpAddress = request.getHeader("X-Real-IP") != null ? request.getHeader("X-Real-IP") : request.getRemoteAddr(); ``` 3. **获取MAC地址**: - 获取物理连接的客户端的MAC地址并不直接可用,因为HTTP协议本身是无状态的,无法直接映射到具体的硬件地址。但如果你的应用运行在一个支持JVM的环境下,你可以利用`InetAddress``NetworkInterface`等类尝试查找本地网络接口的MAC地址。 ```java try { for (InetAddress inetAddress : InetAddress.getAllByName("localhost")) { if (!inetAddress.isLoopbackAddress()) { NetworkInterface networkInterface = NetworkInterface.getByInetAddress(inetAddress); if (networkInterface != null) { byte[] mac = networkInterface.getHardwareAddress(); // 将mac转换成字符串展示 String macAddress = Arrays.toString(mac); } } } } catch (Exception e) { e.printStackTrace(); } ``` 注意,上述MAC地址获取仅限于本地环境,并不能保证获取真实的远程客户端MAC地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值