我们正在运行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绑定到某些文件和路径?
1条答案
按热度按时间yqkkidmi1#
我们解决了这个问题。我们刚刚排除了目标主机提供的某些文件。
下一步是更改maven构建,这样ui模块就不会在本地开发环境中与war文件一起提供/打包。我们通过引入两个maven概要文件来解决这个问题,在war项目中包括或排除ui模块。