This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git
The following commit(s) were added to refs/heads/rocketmq-studio by this push:
new 0035a321 fix(proxy): disable redirects in hot-reload requests (#1667)
0035a321 is described below
commit 0035a321d27b33d141b02b8c7bac01db1f24ad30
Author: Yu Xinqiang <[email protected]>
AuthorDate: Tue Aug 11 20:46:49 2026 +0800
fix(proxy): disable redirects in hot-reload requests (#1667)
ProxyAddressService RestTemplate follows redirects by default, allowing
SSRF bypass via redirect to internal addresses. Override prepareConnection
to set HttpURLConnection.setInstanceFollowRedirects(false).
Fixes #1657
---
.../rocketmq/studio/cluster/proxy/ProxyAddressService.java | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/cluster/proxy/ProxyAddressService.java
b/server/src/main/java/org/apache/rocketmq/studio/cluster/proxy/ProxyAddressService.java
index 08ccab66..4804d267 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/cluster/proxy/ProxyAddressService.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/cluster/proxy/ProxyAddressService.java
@@ -27,6 +27,7 @@ import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.ResourceAccessException;
import org.springframework.web.client.RestTemplate;
+import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
@@ -52,7 +53,13 @@ public class ProxyAddressService {
private final RestTemplate restTemplate;
public ProxyAddressService() {
- SimpleClientHttpRequestFactory factory = new
SimpleClientHttpRequestFactory();
+ SimpleClientHttpRequestFactory factory = new
SimpleClientHttpRequestFactory() {
+ @Override
+ protected void prepareConnection(java.net.HttpURLConnection
connection, String httpMethod) throws IOException {
+ super.prepareConnection(connection, httpMethod);
+ connection.setInstanceFollowRedirects(false);
+ }
+ };
factory.setConnectTimeout(Duration.ofSeconds(3));
factory.setReadTimeout(Duration.ofSeconds(3));
this.restTemplate = new RestTemplate(factory);