proxy: auth: routes: customers: oauth2 stores: passthru recommendations: none
您能够经过proxy.auth.*
设置控制@EnableZuulProxy
下游的受权行为。例:html
proxy: auth: routes: customers: oauth2 stores: passthru recommendations: none
在此示例中,“客户”服务获取OAuth2令牌中继,“存储”服务获取传递(受权头只是经过下游),“建议”服务已删除其受权头。若是有令牌可用,则默认行为是执行令牌中继,不然为passthru。java
有关详细信息,请参阅 ProxyAuthenticationProperties。git
Cloudfoundry的Spring Cloud能够轻松地在Cloud Foundry(平台即服务)中运行 Spring Cloud应用程序 。Cloud Foundry有一个“服务”的概念,它是“绑定”到应用程序的中间件,本质上为其提供包含凭据的环境变量(例如,用于服务的位置和用户名)。github
spring-cloud-cloudfoundry-web
项目为Cloud Foundry中的webapps的一些加强功能提供基本支持:自动绑定到单点登陆服务,并可选择启用粘性路由进行发现。web
spring-cloud-cloudfoundry-discovery
项目提供Spring Cloud Commons DiscoveryClient
的实施,所以您能够@EnableDiscoveryClient
并将您的凭据提供为spring.cloud.cloudfoundry.discovery.[email,password]
,而后直接或经过LoadBalancerClient
使用DiscoveryClient
/}(若是您没有链接到Pivotal Web Services,则也为*.url
)。spring
第一次使用它时,发现客户端可能很慢,由于它必须从Cloud Foundry获取访问令牌。json
如下是Cloud Foundry发现的Spring Cloud应用程序:缓存
@Grab('org.springframework.cloud:spring-cloud-cloudfoundry') @RestController @EnableDiscoveryClient class Application { @Autowired DiscoveryClient client @RequestMapping('/') String home() { 'Hello from ' + client.getLocalServiceInstance() } }
若是您运行它没有任何服务绑定:服务器
$ spring jar app.jar app.groovy $ cf push -p app.jar
它将在主页中显示其应用程序名称。架构
DiscoveryClient
能够根据身份验证的凭据列出空间中的全部应用程序,其中的空间默认为客户端运行的空间(若是有的话)。若是组织和空间都不配置,则它们将根据Cloud Foundry中的用户配置文件进行默认。
注意
|
全部OAuth2 SSO和资源服务器功能在版本1.3中移动到Spring Boot。您能够在Spring Boot用户指南中找到文档。 |
该项目提供从CloudFoundry服务凭据到Spring Boot功能的自动绑定。若是您有一个称为“sso”的CloudFoundry服务,例如,使用包含“client_id”,“client_secret”和“auth_domain”的凭据,它将自动绑定到您使用@EnableOAuth2Sso
启用的Spring OAuth2客户端来自Spring Boot)。可使用spring.oauth2.sso.serviceId
对服务的名称进行参数化。
文献做者:Adam Dudczak,MathiasDüsterhöft,Marcin Grzejszczak,Dennis Kieselhorst,JakubKubryński,Karol Lassak,Olga Maciaszek-Sharma,MariuszSmykuła,Dave Syer
Dalston.RELEASE
您始终须要的是将新功能推向分布式系统中的新应用程序或服务的信心。该项目为Spring应用程序中的消费者驱动Contracts和服务架构提供支持,涵盖了一系列用于编写测试的选项,将其做为资产发布,声称生产者和消费者保留合同用于HTTP和消息的交互。
重要
|
Spring Cloud发布列表BOM导入spring-cloud-contract-dependencies ,这反过来又排除了WireMock所需的依赖关系。这可能致使一种状况,即便你不使用Spring Cloud Contract,那么你的依赖将会受到影响。 |
若是您有一个使用Tomcat做为嵌入式服务器的Spring Boot应用程序(默认为spring-boot-starter-web
)),那么您能够简单地将spring-cloud-contract-wiremock
添加到类路径中并添加@AutoConfigureWireMock
,以即可以在测试中使用Wiremock。Wiremock做为存根服务器运行,您可使用Java API或经过静态JSON声明来注册存根行为,做为测试的一部分。这是一个简单的例子:
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @AutoConfigureWireMock(port = 0) public class WiremockForDocsTests { // A service that calls out over HTTP @Autowired private Service service; // Using the WireMock APIs in the normal way: @Test public void contextLoads() throws Exception { // Stubbing WireMock stubFor(get(urlEqualTo("/resource")) .willReturn(aResponse().withHeader("Content-Type", "text/plain").withBody("Hello World!"))); // We're asserting if WireMock responded properly assertThat(this.service.go()).isEqualTo("Hello World!"); } }
要使用@AutoConfigureWireMock(port=9999)
(例如)启动不一样端口上的存根服务器,而且对于随机端口使用值0.存根服务器端口将在测试应用程序上下文中绑定为“wiremock.server.port”。使用@AutoConfigureWireMock
将一个类型为WiremockConfiguration
的bean添加到测试应用程序上下文中,它将被缓存在具备相同上下文的方法和类之间,就像通常的Spring集成测试同样。
若是您使用@AutoConfigureWireMock
,则它将从文件系统或类路径注册WireMock JSON存根,默认状况下为file:src/test/resources/mappings
。您可使用注释中的stubs
属性自定义位置,这能够是资源模式(ant-style)或目录,在这种状况下,附加*/.json
。例:
@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureWireMock(stubs="classpath:/stubs") public class WiremockImportApplicationTests { @Autowired private Service service; @Test public void contextLoads() throws Exception { assertThat(this.service.go()).isEqualTo("Hello World!"); } }
注意
|
实际上,WireMock老是从src/test/resources/mappings 中加载映射以及 stubs属性中的自定义位置。要更改此行为,您还必须以下所述指定文件根。 |
WireMock能够从类路径或文件系统上的文件读取响应体。在这种状况下,您将在JSON DSL中看到响应具备“bodyFileName”而不是(文字)“body”。默认状况下,相对于根目录src/test/resources/__files
解析文件。要自定义此位置,您能够将@AutoConfigureWireMock
注释中的files
属性设置为父目录的位置(即,位置__files
是子目录)。您可使用Spring资源符号来引用file:…
或classpath:…
位置(但不支持通用URL)。能够给出值列表,而且WireMock将在须要查找响应体时解析存在的第一个文件。
注意
|
当配置files 根时,它会影响自动加载存根(它们来自称为“映射”的子目录中的根位置)。files 的值对从stubs 属性明确加载的存根没有影响。 |
对于更常规的WireMock体验,使用JUnit @Rules
启动和中止服务器,只需使用WireMockSpring
便利类来获取Options
实例:
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) public class WiremockForDocsClassRuleTests { // Start WireMock on some dynamic port // for some reason `dynamicPort()` is not working properly @ClassRule public static WireMockClassRule wiremock = new WireMockClassRule( WireMockSpring.options().dynamicPort()); // A service that calls out over HTTP to localhost:${wiremock.port} @Autowired private Service service; // Using the WireMock APIs in the normal way: @Test public void contextLoads() throws Exception { // Stubbing WireMock wiremock.stubFor(get(urlEqualTo("/resource")) .willReturn(aResponse().withHeader("Content-Type", "text/plain").withBody("Hello World!"))); // We're asserting if WireMock responded properly assertThat(this.service.go()).isEqualTo("Hello World!"); } }
使用@ClassRule
表示服务器将在此类中的全部方法后关闭。