Spring Cloud Security - альтернатива @PreAuthorize в маршрутизации YML? - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь реализовать маршрутизацию в приложении 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')

Спасибо.

...