Я пытаюсь реализовать маршрутизацию в приложении Gateway, и я делаю это впервые. В идеале я хотел бы использовать файл YML для маршрутизации. Или используйте компонент RouteLocator.
Но в настоящее время у меня есть контроллеры REST, которые перенаправляют запросы вручную.
До того, как запрос достигнет этой точки, у меня есть фильтр SecurityConfig и ReactiveAuthenticationManager - он проверяет токен JWT и возвращает Имя пользователяPasswordAuthenticationToken - включает права пользователя, содержащиеся в токене ...
Например, один из маршрутов - это микросервис, называемый службой отслеживания. Вот контроллер:
@RestController
@RequestMapping("/tracking-service/tracking")
public class TrackingController {
@Autowired
private TrackingService trackingService;
@GetMapping
public Flux getAllTracking() {
return trackingService.getAllTracking();
}
...
}
А вот служба, которую он вызывает:
@Service
public class TrackingService {
private WebClient webClient;
@PreAuthorize("hasAuthority('MANAGER')")
public Flux getAllTracking() {
// Make the HTTP request to the tracking microservice
}
}
Мой вопрос касается использования @PreAuthorize. Для этого конкретного маршрута возвращается 401, если у пользователя нет полномочий 'MANAGER' в его токене авторизации. Если бы я использовал файл YML для настройки своей маршрутизации, возможно ли реализовать эту функцию @PreAuthorize?
т.е. это может выглядеть примерно так?
spring:
cloud:
gateway:
routes:
- id: tracking
uri: http://tracking-service
predicates:
- Path=/tracking-service/**
filters:
- StripPrefix=1
- PreAuthorize=hasAuthority('MANAGER')
Спасибо.