Я пытаюсь создать приложение на основе микросервисной архитектуры в Spring Boot, используя:
- Сервер аутентификации (OAuth2.0 с использованием Spring Security)
- Шлюз API (Netflix Zuul) какСервер ресурсов (для проверки запроса на конкретный ресурс, обслуживаемый одним из микросервисов)
- Eureka / Discovery Server в качестве службы реестра услуг
- Feign Client (со всеми микросервисами, чтобы они взаимодействовали друг с другом)
- PostgreSQL как база данных (обрабатывается отдельной службой базы данных)
Проблема связана с шлюзом API.Я хочу, чтобы он работал как Ресурсный сервер, но как Zuul там работает и как Прокси-сервер.Поэтому я хочу знать, как мы можем реализовать его в качестве сервера ресурсов для проверки запросов на основе полномочий или ролей.
Я могу добиться этого в монолитном приложении, но здесь я немного запутался.Я могу использовать Feign Client с API-шлюзом, сделать его клиентом Eureka / Discovery и определить некоторые (Feign) интерфейсы для проверки запроса на конкретный ресурс, фактически обслуживаемый одним из микросервисов.
Например,Я могу создать (Сервис) Интерфейс для Сервиса Компании и проверить вещи в этом.Используя контроллер для каждой службы, я могу использовать @ PreAuthorize для проверки и проверки доступа к ресурсу.Но при таком подходе мне нужно создать интерфейс и контроллер для каждой службы.
// Company Controller File
@RestController
@RequestMapping(produces=MediaType.APPLICATION_JSON_VALUE)
public class TestController {
@Autowired
private DbEngineService dbEngineService;
@GetMapping("companies")
@PreAuthorize("hasRole('USER_ADMIN')")
ResponseEntity<?> getCompanies(Model model) {
return companyService.addTestEntity(testEntity);
}
}
// Company Service File
@FeignClient("company-service")
@RequestMapping("company-service")
public interface CompanyService{
@GetMapping("companies")
ResponseEntity<?> getCompanies();
@GetMapping("company/{id}")
ResponseEntity<?> getCompany(@PathVariable Long id);
}
Я не уверен, что этот подход правильный.Я впервые работаю с микросервисами.
Является ли способ, которым я пытаюсь реализовать API Gateway, поскольку Resource Server является правильным способом сделать это?Есть ли способ с Zuul прокси, чтобы справиться с чем-то подобным.Есть ли какой-нибудь другой лучший способ реализовать его, например, сделать все микросервисы в качестве сервера ресурсов или что-то в этом роде?
Спасибо.