День добрый!
Возникла у нас задача - написать прокси сервер с возможностью динамического создания маршрутов, ролей, предоставляющих доступ к этми маршрутам, и пользователей, которым эти все роли и назначаются. Делалсь это для динамической конфигурации доступа к API разнородных сервисов.
За основу был взят Netflix Zuul Proxy, однако, нам необходимо, чтобы данные о маршуртах сохранялись в БД и при старте перечитывались оттуда. Как это сделать?
За конфигурацию сервиса отвечает класс ZuulProperties, который и хранит в себе маршруты и другие настройки.
Дальше дело техники:
Создаём конфигурационный класс, создаём в нём метод, который возвращает бин ZuulProperties. В этом методе инициализируем маршруты из бд и всё.
@Configuration
public class AppConfig {
@Autowired
private CustomZuulRouteRepository routeRepository;
@Primary
@Bean(name = "zuulConfigProperties")
@RefreshScope
@ConfigurationProperties("zuul")
public ZuulProperties zuulProperties() {
List<CustomZuulRoute> all = routeRepository.findAll();
ZuulProperties props = new ZuulProperties();
for (CustomZuulRoute customZuulRoute : all) {
if (customZuulRoute.getEnabled()) {
props.getRoutes()
.put(customZuulRoute.getUuid(), new ZuulProperties.ZuulRoute(customZuulRoute.getUuid(),
customZuulRoute.getPath(),
null,
customZuulRoute.getOutcomeUrl(),
true,
false, new HashSet<>()));
}
}
return props;
}
}