使用 node.js Keycloak 适配器动态保护 url
Dynamically protecting url using node.js Keycloak adapter
here 中的代码适用于预先知道 url 的基本情况。
添加中间件并启动 express 应用程序后,如何处理 Keycloak 对 url 的动态保护?
我正在考虑通过一些 node.js 模块处理从文件中读取新的 url,该模块将发出事件,然后下面的代码将处理该事件。在事件处理程序的代码中,将添加对 app.all('/new url', keycloak.protect())
的调用。
我试过了,但它没有按预期工作,因为 app.use('/lap', [some_midleware])
在新的 app.all('/new url', keycloak.protect()
之前
我想到的唯一方法是通过在 some_midleware
之前插入新的中间件来修改 app._router.stack
var Keycloak = require('keycloak-connect');
var hogan = require('hogan-express');
var express = require('express');
var session = require('express-session');
var fs = require()
var app = express();
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
var memoryStore = new session.MemoryStore();
app.use(session({
secret: 'mySecret',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
var keycloak = new Keycloak({
store: memoryStore
});
app.use(keycloak.middleware({
logout: '/logout',
admin: '/',
protected: '/protected/resource'
}));
app.all('/url', keycloak.protect())
app.all('*', [some_midleware])
据我了解,您想动态添加在示例中的最后一条路线 之前 处理的新路线 (app.use('*', ...)
)。
您可以使用单独的路由器来做到这一点:
app.all('/url', keycloak.protect())
const router = express.Router();
app.use(router);
app.use('*', [some_midleware])
然后,要添加新的路由处理程序,您可以将它们添加到 router
,而不是 app
:
router.get('/new url', keycloak.protect());
因为 router
添加在 之前 app.use('*', ...)
,它总是先处理请求。仅当请求不匹配任何处理程序时,才会在最后一行的处理程序上传递请求。
here 中的代码适用于预先知道 url 的基本情况。
添加中间件并启动 express 应用程序后,如何处理 Keycloak 对 url 的动态保护?
我正在考虑通过一些 node.js 模块处理从文件中读取新的 url,该模块将发出事件,然后下面的代码将处理该事件。在事件处理程序的代码中,将添加对 app.all('/new url', keycloak.protect())
的调用。
我试过了,但它没有按预期工作,因为 app.use('/lap', [some_midleware])
在新的 app.all('/new url', keycloak.protect()
之前
我想到的唯一方法是通过在 some_midleware
app._router.stack
var Keycloak = require('keycloak-connect');
var hogan = require('hogan-express');
var express = require('express');
var session = require('express-session');
var fs = require()
var app = express();
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
var memoryStore = new session.MemoryStore();
app.use(session({
secret: 'mySecret',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
var keycloak = new Keycloak({
store: memoryStore
});
app.use(keycloak.middleware({
logout: '/logout',
admin: '/',
protected: '/protected/resource'
}));
app.all('/url', keycloak.protect())
app.all('*', [some_midleware])
据我了解,您想动态添加在示例中的最后一条路线 之前 处理的新路线 (app.use('*', ...)
)。
您可以使用单独的路由器来做到这一点:
app.all('/url', keycloak.protect())
const router = express.Router();
app.use(router);
app.use('*', [some_midleware])
然后,要添加新的路由处理程序,您可以将它们添加到 router
,而不是 app
:
router.get('/new url', keycloak.protect());
因为 router
添加在 之前 app.use('*', ...)
,它总是先处理请求。仅当请求不匹配任何处理程序时,才会在最后一行的处理程序上传递请求。