针对tomcat的javascript节点http中间件代理和express

lvmkulzt  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(296)

我们正在运行java应用程序(基于spring),包括tomcat容器中的ui模块。直接给tomcat打电话http://localhost:8080 显示登录页面,并且对web应用发生重定向302。现在,我们希望通过运行带有http中间件代理和浏览器同步的express服务器,将ui模块与java应用程序分开开发。这些模块尚未从war文件中提取出来,正在tomcat示例上运行。出于测试目的,我们只是将ui模块复制到另一个目录,以设置express和相应的模块。问题是我们无法正确设置授权cookies(JSSessionID)和csrf令牌。
重定向302如何被截获并重定向到单独托管的ui应用程序?
我们已获得授权,因此不需要登录,但调用“复制的应用程序”不起作用,并导致“身份验证错误”或“禁止”。
我们已经检查了这里的文档和其他帖子。

var cookie;
function relayRequestHeaders(proxyReq, req) {
  if (cookie) {
    proxyReq.setHeader('cookie', cookie);
  }
};

function relayResponseHeaders(proxyRes, req, res) {
  var proxyCookie = proxyRes.headers["set-cookie"];

  if (proxyCookie) {
    cookie = proxyCookie;
  }

};

const oOptions = {
    target: 'http://localhost:8080',
    changeOrigin: true,
    auth: 'user:pw',
    pathRewrite: {
        '^/dispatcher': '/dispatcher',
    },
    //cookieDomainRewrite: 'localhost',
    onProxyReq: relayRequestHeaders,
    onProxyRes: relayResponseHeaders,
    logLevel: 'debug'
};

const wildcardProxy = createProxyMiddleware( oOptions );

app.use(wildcardProxy);

有没有办法解决这个问题?
谢谢
更新:我们还尝试过滤有效的上下文路径,但它无法通过express访问托管webapp的资源。

const oOptions = {
    target: 'http://localhost:8080',
    changeOrigin: true,
    auth: 'user:pw',
    logLevel: 'debug'
};

const wildcardProxy = createProxyMiddleware(['index.html', 'index.jsp', '!/resources/scripts/**/*.js'], oOptions );

app.use(wildcardProxy);

这是因为我们正在代理“/”。如何实现只代理login和initial index.jsp,然后使用“webapp”的资源而不使用tomcat的资源(例如.*.js)?是否可以通过app.use绑定到某些文件和路径?

yqkkidmi

yqkkidmi1#

我们解决了这个问题。我们刚刚排除了目标主机提供的某些文件。

config.json:
{
...
"ignoreFilesProxy": ["!/**/*.js", "!/**/*.css", "!/**/*.xml", "!/**/*.properties"],
...
}
...
createProxyMiddleware(config.ignoreFilesProxy, oOptions);
...

下一步是更改maven构建,这样ui模块就不会在本地开发环境中与war文件一起提供/打包。我们通过引入两个maven概要文件来解决这个问题,在war项目中包括或排除ui模块。

相关问题