Spring Boot 从FeignClient路由到API网关以进行jwt授权

gblwokeq  于 2023-02-19  发布在  Spring
关注(0)|答案(1)|浏览(182)

我使用的是Spring云API网关,它验证jwt令牌,然后进一步让任何请求通过。对应的yml如下。

server:
  port: 9000
  
spring:  
  application:
    name: API-GATEWAY

  cloud:
    gateway:
      routes:
      - id: EMPLOYEE-SERVICE
        uri:
          lb://EMPLOYEE-SERVICE
        predicates:
        - Path=/employee/**
        - Method=GET,POST,PUT,DELETE
        filters:
        - RemoveRequestHeader=Cookie
        - AuthorizationHeaderFilter
        
      - id: USER-SERVICE
        uri:
          lb://USER-SERVICE
        predicates:
        - Path=/api/auth/**
        - Method=POST

      - id: RATING-SERVICE
        uri:
          lb://RATING-SERVICE
        predicates:
        - Path=/ratingsdata/**
        filters:
        - RemoveRequestHeader=Cookie
        - AuthorizationHeaderFilter        
        
               
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      default-zone: http://localhost:9761/eureka

我正在使用伪客户端从EMPLOYEE-SERVICE调用RATING-SERVICE。现在,如果任何其他微服务(例如EMPLOYEE-SERVICE)向RATING-SERVICE发出任何请求,也应该使用jwt令牌进行验证。我尝试了以下代码,但它不起作用。

@Autowired
    private RatingService ratingService;
Double empRating = ratingService.getRating(employee.getManagerPoints(), employee.getPeersPoints(), employee.getDepartment().getDeptName());



 @FeignClient(name = "RATING-SERVICE", url="http://localhost:9000")
public interface RatingService {

    @GetMapping("/ratingsdata/{managerInput}/{peerInput}/{dept}")
    Double getRating(@PathVariable Double managerInput, @PathVariable Double peerInput,
            @PathVariable String dept);
}
mpbci0fu

mpbci0fu1#

虽然这里没有真正的问题,但我会回答!你没有通过网关路由呼叫的代码或过程(这是我正在寻找的)。
一旦原始请求通过网关到达第一个服务(Employee-service),第二个调用(到达rating-service)**就不会通过网关;OpenFeign查找您调用的服务并直接发出请求,因此它没有被授权。

相关问题