要实现不允许直接调用微服务,只允许通过Zuul API网关访问,可以通过以下步骤进行解决:
spring:
cloud:
gateway:
enabled: false
spring:
cloud:
gateway:
routes:
- id: microservice
uri: lb://microservice
predicates:
- Path=/microservice/**
这里使用了lb://microservice
作为微服务的URI,它表示使用负载均衡来访问名为microservice
的微服务。
@RestController
public class ZuulController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/microservice/{path}", method = RequestMethod.GET)
public ResponseEntity forwardRequest(@PathVariable String path) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// 将请求转发给微服务
ResponseEntity responseEntity = restTemplate.exchange("http://microservice/" + path, HttpMethod.GET, new HttpEntity<>(headers), String.class);
return responseEntity;
}
}
在上面的代码中,我们使用RestTemplate
来转发请求给微服务。注意,这里的路径"/microservice/{path}"需要与Zuul网关的路由规则中的路径一致,可以根据实际情况进行修改。
这样,只有通过Zuul API网关访问"/microservice/**"路径的请求才会被转发给微服务,其他直接访问微服务的请求将被禁止。