【发布时间】:2021-06-23 11:15:25
【问题描述】:
我们正在运行我们的 Java 应用程序(基于 Spring),包括在 Tomcat 容器中的 UI 模块。直接通过 http://localhost:8080 调用 tomcat 会显示一个登录页面,并且 Web 应用程序会发生重定向 302。 现在我们想通过运行带有 http-middleware-proxy 和 browser-sync 的 Express 服务器来独立于 Java 应用程序开发 UI 模块。这些模块尚未从 war 文件中提取出来,而是在 Tomcat 实例上运行。出于测试目的,我们只是将 UI 模块复制到另一个目录以设置 Express 和相应的模块。 问题是我们无法正确设置授权 cookie (JSESSIONID) 和 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 访问托管 web 应用程序的资源。
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);
这是因为我们正在代理“/”。如何只代理登录和初始 index.jsp,然后使用“webapp”资源而不是 tomcat 资源(例如 *.js)?这是否可以通过 app.use 以某种方式绑定到某些文件和路径?
【问题讨论】:
标签: javascript java node.js express tomcat