Springboot 代理路由 webscoket 和 http 请求

问题描述

我需要向现有的 Spring Boot 应用程序添加简单的请求转发功能

目前我有后端 zeppelin 服务器,由于某些限制,我无法直接访问 zeppelin url,所以我需要添加一个可以将请求路由到 zeppelin 服务器的代码,如下所示

浏览器-->Spring-boot(proxy)-->Zeppelin

我的简单代理代码

@Controller
@RequestMapping("/proxy")
public class SimpleController {

    @GetMapping("/**",produces = "application/json")
    public ResponseEntity<String> getUsers(HttpServletRequest request) {
    
    String url = request.getRequestURI();
    url = url.replace("proxy","");
    return  sendRequestusingRestTemplate(url,request);
    }

}

public ResponseEntity<String> sendRequestusingRestTemplate(String url,HttpServletRequest requestrequest)
{
RestTemplate restTemplate = new RestTemplate();

String zeppelinServerUrl = "http://192.168.1.34:8080/"+url;

restTemplate.getForEntity(zeppelinServerUrl,String.class);

URI uri = new URI(zeppelinServerUrl);
     
HttpHeaders headers = new HttpHeaders();

Enumeration<String> headerNames = request.getHeaderNames();
    headerNames.asIterator().forEachRemaining(header -> {
    headers(header,request.getHeader(header);
    });
    
 
httpentity<String> requestEntity = new httpentity<>(null,headers);
 
return restTemplate.exchange(uri,HttpMethod.GET,requestEntity,String.class)


}

它一直工作到一些请求,但作为 zeppelin ui 的一部分,它尝试打开一个 websocket 到后端服务器,所以当浏览器发送连接升级请求时它不起作用。

是否有一种简单的方法可以为此添加路由,或者我需要将请求作为 webscoket 客户端重新路由到我的后端服务器

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...