使用Spring Cloud Netflix Zuul代理网关访问后台REST服务的实现(代码)
本篇文章给大家带来的内容是关于使用Spring Cloud Netflix Zuul代理网关访问后台REST服务的实现(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
1.概述
在本文中,我们将探讨如何在互相单独部署的前端应用程序和后端REST API服务之间进行通信。目的是解决浏览器的跨域资源访问和同源策略限制,允许页面UI能够调用后台的API,即使它们不在同一个服务器中。
我们在这里创建了两个独立的应用程序 - 一个UI应用程序和一个简单的REST API,我们将在UI应用程序中使用Zuul代理来代理对REST API的调用。Zuul是Netflix基于JVM的路由器和服务器端负载均衡器。Spring Cloud与嵌入式Zuul代理有很好的集成。
2.REST应用
我们的REST API应用程序是一个简单的Spring Boot应用程序。在本文中将在端口8081上运行服务器中部署的API 。
配置文件
server.contextPath=/spring-zuul-foos-resourceserver.port=80 81
让我们首先为我们将要使用的资源定义基本DTO:
public class Foo { private long id; private String name; // standard getters and setters }
定义一个简单的控制器:
@Controllerpublic class FooController { @RequestMapping(method = RequestMethod.GET, value = "/foos/{id}") @ResponseBody public Foo findById( @PathVariable long id, HttpServletRequest req, HttpServletResponse res) { return new Foo(Long.parseLong(randomNumeric(2)), randomAlphabetic(4)); } }
3. 前端应用程序
我们的UI应用程序也是一个简单的Spring Boot应用程序。在本文中此应用运行在端口8080上。
首先,我们需要通过Spring Cloud向我们的UI应用程序的pom.xml添加对zuul支持的依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency>
接下来 - 我们需要配置Zuul,因为我们正在使用Spring Boot,所以我们将在application.yml中执行此操作:
zuul: routes: foos: path: /foos/** url: http://localhost:8081/spring-zuul-foos-resource/foos
注意:
我们代理我们的资源服务器Foos。
来自UI的所有以“ / foos / ”开头的请求将被路由到我们的Foos资源服务器,地址为:http:// loclahost:8081/spring-zuul-foos-resource / foos /
然后编写我们的主页面index.html — 这里使用一些AngularJS:
<html> <body ng-app="myApp" ng-controller="mainCtrl"> <script src="angular.min.js"></script> <script src="angular-resource.min.js"></script> <script> var app = angular.module('myApp', ["ngResource"]); app.controller('mainCtrl', function($scope,$resource,$http) { $scope.foo = {id:0 , name:"sample foo"}; $scope.foos = $resource("/foos/:fooId",{fooId:'@id'}); $scope.getFoo = function(){ $scope.foo = $scope.foos.get({fooId:$scope.foo.id}); } });</script><p> <h1>Foo Details</h1> <span>{{foo.id}}</span> <span>{{foo.name}}</span> <a href="#" ng-click="getFoo()">New Foo</a> </p> </body> </html>
这里最重要的方面是我们如何使用相对URL访问API !
请记住,API应用程序未部署在与UI应用程序相同的服务器上,因此相对URL不起作用,并且在没有代理的情况下不起作用。
但是,通过代理,我们通过Zuul代理访问Foo资源,Zuul代理配置为将这些请求路由到实际部署API的位置。
最后,启用Boot的应用程序:
@EnableZuulProxy@SpringBootApplicationpublic class UiApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(UiApplication.class, args); } }
这里使用@EnableZuulProxy注解来启动Zuul代理,这非常干净和简洁。
4.运行测试
分别启动2个应用系统,在浏览器中输入http://localhost:8080/index
每点击一次“New Foo”按钮就访问后台REST API一次。
5.定制Zuul过滤器
有多个Zuul过滤器可用,我们也可以创建自己的定制过滤器:
@Componentpublic class CustomZuulFilter extends ZuulFilter { @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); ctx.addZuulRequestHeader("Test", "TestSample"); return null; } @Override public boolean shouldFilter() { return true; } // ...}
这个简单的过滤器只是在请求头中添加了一个名为“ Test ” 的属性- 当然,我们可以根据需要增加我们的请求。
6.测试自定义Zuul过滤器
最后,让我们测试一下,确保我们的自定义过滤器正常工作 - 首先我们将在Foos资源服务器上修改我们的FooController:
@Controllerpublic class FooController { @GetMapping("/foos/{id}") @ResponseBody public Foo findById( @PathVariable long id, HttpServletRequest req, HttpServletResponse res) { if (req.getHeader("Test") != null) { res.addHeader("Test", req.getHeader("Test")); } return new Foo(Long.parseLong(randomNumeric(2)), randomAlphabetic(4)); } }
现在 - 让我们测试一下:
@Testpublic void whenSendRequest_thenHeaderAdded() { Response response = RestAssured.get("http://localhost:8080/foos/1"); assertEquals(200, response.getStatusCode()); assertEquals("TestSample", response.getHeader("Test")); }
7.结论
在这篇文章中,我们专注于使用Zuul将请求从UI应用程序路由到REST API。我们成功地解决了CORS和同源策略,我们还设法定制和扩充了传输中的HTTP请求。
相关推荐:
spring cloud 之 Feign 使用HTTP请求远程服务
spring-cloud-sleuth+zipkin追踪服务实现(二)
Atas ialah kandungan terperinci 使用Spring Cloud Netflix Zuul代理网关访问后台REST服务的实现(代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Memandangkan kerumitan aplikasi perusahaan terus meningkat, semakin banyak perusahaan mula membahagikan aplikasi kepada berbilang perkhidmatan mikro dan melengkapkan keseluruhan proses perniagaan melalui kerjasama antara perkhidmatan mikro. Pendekatan seni bina ini boleh menjadikan aplikasi lebih stabil dan berskala, tetapi ia juga membawa beberapa masalah baharu, seperti pengimbangan beban, penemuan perkhidmatan, dsb. Artikel ini akan memperkenalkan cara menggunakan Spring Cloud untuk menyelesaikan masalah pengimbangan beban di bawah seni bina perkhidmatan mikro. Apakah pengimbangan beban? Pengimbangan Beban (LoadBalancing) merujuk kepada pengimbangan berbilang pelayan dan rangkaian

Secara peribadi, saya fikir prasyarat untuk membaca kod sumber ialah anda mesti boleh menggunakannya Setelah anda biasa dengannya, anda boleh meneka bagaimana orang lain melaksanakannya. Jika terdapat dokumen rasmi yang berkaitan, kemudian baca dokumen rasmi.

Dengan pembangunan Internet dan pengemaskinian berterusan teknologi, aplikasi tunggal tradisional tidak lagi dapat memenuhi keperluan pengguna, dan konsep perkhidmatan mikro telah muncul. SpringCloud ialah kit pembangunan perkhidmatan mikro yang dilancarkan oleh Pivotal Ia menyediakan pembangun cara yang sangat mudah untuk membina, menggunakan dan mengurus aplikasi seni bina perkhidmatan mikro. Artikel ini akan memperkenalkan pembangunan perkhidmatan mikro SpringCloud berorientasikan perkhidmatan secara terperinci, termasuk konsep dan seni bina SpringCloud, proses pembangunan perkhidmatan mikro dan

Dengan perkembangan pesat Internet, kerumitan aplikasi peringkat perusahaan semakin meningkat dari hari ke hari. Sebagai tindak balas kepada keadaan ini, seni bina perkhidmatan mikro muncul. Dengan modularitinya, penggunaan bebas dan kebolehskalaan yang tinggi, ia telah menjadi pilihan pertama untuk pembangunan aplikasi peringkat perusahaan hari ini. Sebagai seni bina perkhidmatan mikro yang cemerlang, Spring Cloud telah menunjukkan kelebihan besar dalam aplikasi praktikal. Artikel ini akan memperkenalkan penggunaan dan pengendalian serta penyelenggaraan seni bina perkhidmatan mikro SpringCloud. 1. Gunakan seni bina perkhidmatan mikro SpringCloud SpringCloud

Cara menggunakan Java untuk membangunkan aplikasi orkestrasi kontena berdasarkan Spring Cloud Kubernetes Dengan pembangunan dan aplikasi meluas teknologi kontena, alat orkestrasi kontena telah menjadi bahagian yang amat diperlukan dalam pembangun. Sebagai salah satu alat orkestrasi kontena yang paling popular, Kubernetes telah menjadi standard industri. Dalam konteks ini, menggabungkan Spring Cloud dan Kubernetes, kami boleh membangunkan aplikasi dengan mudah berdasarkan orkestrasi kontena. Artikel ini akan memperkenalkan secara terperinci

Pengenalan kepada rangka kerja SpringCloud dalam bahasa Java Dengan populariti pengkomputeran awan dan perkhidmatan mikro, rangka kerja SpringCloud telah menjadi salah satu rangka kerja pilihan untuk membina aplikasi asli awan dalam bahasa Java. Artikel ini akan memperkenalkan konsep dan ciri rangka kerja Spring Cloud dan cara menggunakan Spring Cloud untuk membina seni bina perkhidmatan mikro. Pengenalan kepada SpringCloud Rangka kerja SpringCloud ialah rangka kerja mikro perkhidmatan berdasarkan SpringBoot. ia adalah

Dengan populariti seni bina perkhidmatan mikro, semakin banyak pasukan pembangunan perusahaan mula menggunakan Spring Cloud untuk membina sistem perkhidmatan mikro mereka sendiri. Dalam persekitaran teragih, melaksanakan kunci teragih ialah cabaran teknikal yang penting. Artikel ini akan memperkenalkan cara melaksanakan amalan mikroperkhidmatan kunci teragih di bawah rangka kerja Awan Musim Bunga. Pertama, kita perlu memahami apa itu kunci yang diedarkan. Kunci teragih ialah teknologi yang digunakan untuk melindungi akses kepada sumber yang dikongsi Ia boleh memastikan bahawa dalam persekitaran yang diedarkan, berbilang nod tidak akan mengubah suai sumber yang sama pada masa yang sama atau

Dengan pembangunan berterusan teknologi Internet, semakin banyak perusahaan mula menggunakan seni bina perkhidmatan mikro untuk membina sistem mereka. SpringCloud ialah rangka kerja perkhidmatan mikro yang telah muncul dengan pantas dalam konteks ini. Atas dasar ini, artikel ini akan membincangkan gabungan perkhidmatan mikro SpringCloud dan komponenisasi, dan menganalisis kelebihan dan kaedah pelaksanaannya. 1. Pengenalan kepada perkhidmatan mikro SpringCloud SpringCloud ialah versi projek SpringBoot yang dinaik taraf Ia menyediakan sejumlah besar alatan.
