Динамическая защита URL с помощью адаптера Keycloak node.js - PullRequest
0 голосов
/ 19 ноября 2018

Код здесь работает для основного случая, когда URL-адреса известны заранее.Как работать с динамической защитой URL-адресов с помощью Keycloak после добавления промежуточного ПО и запуска экспресс-приложения?Я думал об обработке чтения новых URL из файла некоторым модулем node.js, который будет генерировать событие, а затем код ниже будет обрабатывать событие.В коде обработчика событий будет добавлен вызов app.all('/new url', keycloak.protect()).Я попробовал это, но это не работает, как ожидалось, потому что app.use('/lap', [some_midleware]) перед новой app.all('/new url', keycloak.protect() Единственный способ, которым я думаю, - это изменить app._router.stack, вставив новое промежуточное программное обеспечение перед some_midleware

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]) 

1 Ответ

0 голосов
/ 20 ноября 2018

Насколько я понимаю, вы хотите динамически добавлять новые маршруты, которые обрабатываются за до последнего маршрута в вашем примере (app.use('*', ...)).

Вы можете сделать это с отдельнымrouter:

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 *За 1015 * до app.use('*', ...) он всегда будет первым обрабатывать запросы.Только если запросы не совпадают ни с одним из обработчиков, запрос на обработчик будет передан в последней строке.

...