null

Инициализация кастомных маршрутов Zuul Proxy на старте приложения

День добрый!

Возникла у нас задача - написать прокси сервер с возможностью динамического создания маршрутов, ролей, предоставляющих доступ к этми маршрутам, и пользователей, которым эти все роли и назначаются. Делалсь это для динамической конфигурации доступа к 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;
    }
}