Compare commits
No commits in common. 'gh-pages' and 'main' have entirely different histories.
@ -1,6 +0,0 @@
@@ -1,6 +0,0 @@
|
||||
version: 2 |
||||
jobs: |
||||
build: |
||||
branches: |
||||
ignore: |
||||
- gh-pages # list of branches to ignore |
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
root=true |
||||
|
||||
[*.java] |
||||
indent_style = tab |
||||
indent_size = 4 |
||||
continuation_indent_size = 8 |
||||
|
||||
[*.xml] |
||||
indent_style = tab |
||||
indent_size = 4 |
||||
continuation_indent_size = 8 |
||||
|
@ -1,79 +0,0 @@
@@ -1,79 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<parent> |
||||
<groupId>org.springframework.cloud</groupId> |
||||
<artifactId>spring-cloud-build</artifactId> |
||||
<version>2.2.1.BUILD-SNAPSHOT</version> |
||||
<relativePath></relativePath> |
||||
</parent> |
||||
<groupId>org.springframework.cloud</groupId> |
||||
<artifactId>spring-cloud-gateway</artifactId> |
||||
<version>2.2.1.BUILD-SNAPSHOT</version> |
||||
<packaging>pom</packaging> |
||||
<name>Spring Cloud Gateway</name> |
||||
<description>Spring Cloud Gateway</description> |
||||
<url>https://spring.io/spring-cloud/spring-cloud-gateway</url> |
||||
<organization> |
||||
<name>Pivotal Software, Inc.</name> |
||||
<url>https://www.spring.io</url> |
||||
</organization> |
||||
<licenses> |
||||
<license> |
||||
<name>Apache License, Version 2.0</name> |
||||
<url>https://www.apache.org/licenses/LICENSE-2.0</url> |
||||
</license> |
||||
</licenses> |
||||
<developers> |
||||
<developer> |
||||
<id>sgibb</id> |
||||
<name>Spencer Gibb</name> |
||||
<email>sgibb at pivotal.io</email> |
||||
<organization>Pivotal Software, Inc.</organization> |
||||
<organizationUrl>https://www.spring.io</organizationUrl> |
||||
<roles> |
||||
<role>Project lead</role> |
||||
</roles> |
||||
</developer> |
||||
</developers> |
||||
<scm> |
||||
<connection>scm:git:git://github.com/spring-cloud/spring-cloud-gateway.git</connection> |
||||
<developerConnection>scm:git:ssh://git@github.com/spring-cloud/spring-cloud-gateway.git</developerConnection> |
||||
<url>https://github.com/spring-cloud/spring-cloud-gateway</url> |
||||
</scm> |
||||
<profiles> |
||||
<profile> |
||||
<id>spring</id> |
||||
<repositories> |
||||
<repository> |
||||
<releases> |
||||
<enabled>false</enabled> |
||||
</releases> |
||||
<snapshots> |
||||
<enabled>true</enabled> |
||||
</snapshots> |
||||
<id>spring-snapshots</id> |
||||
<name>Spring Snapshots</name> |
||||
<url>https://repo.spring.io/libs-snapshot-local</url> |
||||
</repository> |
||||
<repository> |
||||
<snapshots> |
||||
<enabled>false</enabled> |
||||
</snapshots> |
||||
<id>spring-milestones</id> |
||||
<name>Spring Milestones</name> |
||||
<url>https://repo.spring.io/libs-milestone-local</url> |
||||
</repository> |
||||
<repository> |
||||
<snapshots> |
||||
<enabled>false</enabled> |
||||
</snapshots> |
||||
<id>spring-releases</id> |
||||
<name>Spring Releases</name> |
||||
<url>https://repo.spring.io/release</url> |
||||
</repository> |
||||
</repositories> |
||||
</profile> |
||||
</profiles> |
||||
</project> |
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
|
||||
# Contributing |
||||
|
||||
Spring Cloud is released under the non-restrictive Apache 2.0 license, |
||||
and follows a very standard Github development process, using Github |
||||
tracker for issues and merging pull requests into master. If you want |
||||
to contribute even something trivial please do not hesitate, but |
||||
follow the guidelines below. |
||||
|
||||
## Sign the Contributor License Agreement |
||||
Before we accept a non-trivial patch or pull request we will need you to sign the |
||||
[Contributor License Agreement](https://cla.pivotal.io/sign/spring). |
||||
Signing the contributor's agreement does not grant anyone commit rights to the main |
||||
repository, but it does mean that we can accept your contributions, and you will get an |
||||
author credit if we do. Active contributors might be asked to join the core team, and |
||||
given the ability to merge pull requests. |
||||
|
||||
## Code of Conduct |
||||
This project adheres to the Contributor Covenant [Code of conduct](https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc). By participating, you are expected to uphold this code. Please report |
||||
unacceptable behavior to spring-code-of-conduct@pivotal.io. |
||||
|
||||
## Code Conventions and Housekeeping |
||||
None of these is essential for a pull request, but they will all help. They can also be |
||||
added after the original pull request but before a merge. |
||||
|
||||
* Use the Spring Framework code format conventions. If you use Eclipse |
||||
you can import formatter settings using the |
||||
`eclipse-code-formatter.xml` file from the |
||||
[Spring Cloud Build](https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml) project. If using IntelliJ, you can use the |
||||
[Eclipse Code Formatter Plugin](https://plugins.jetbrains.com/plugin/6546) to import the same file. |
||||
* Make sure all new `.java` files to have a simple Javadoc class comment with at least an |
||||
`@author` tag identifying you, and preferably at least a paragraph on what the class is |
||||
for. |
||||
* Add the ASF license header comment to all new `.java` files (copy from existing files |
||||
in the project) |
||||
* Add yourself as an `@author` to the .java files that you modify substantially (more |
||||
than cosmetic changes). |
||||
* Add some Javadocs and, if you change the namespace, some XSD doc elements. |
||||
* A few unit tests would help a lot as well -- someone has to do it. |
||||
* If no-one else is using your branch, please rebase it against the current master (or |
||||
other target branch in the main project). |
||||
* When writing a commit message please follow [these conventions](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html), |
||||
if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit |
||||
message (where XXXX is the issue number). |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
<!-- |
||||
Thanks for raising a Spring Cloud issue. What sort of issue are you raising? |
||||
|
||||
Question |
||||
|
||||
Please ask questions about how to use something, or to understand why something isn't |
||||
working as you expect it to, on Stack Overflow using the spring-cloud tag. |
||||
|
||||
Bug report |
||||
|
||||
Please provide details of the problem, including the version of Spring Cloud that you |
||||
are using. If possible, please provide a test case or sample application that reproduces |
||||
the problem. This makes it much easier for us to diagnose the problem and to verify that |
||||
we have fixed it. |
||||
|
||||
Enhancement |
||||
|
||||
Please start by describing the problem that you are trying to solve. There may already |
||||
be a solution, or there may be a way to solve it that you hadn't considered. |
||||
--> |
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
--- |
||||
name: Bug report |
||||
about: Create a report to help us improve |
||||
title: '' |
||||
labels: waiting-for-triage |
||||
assignees: '' |
||||
|
||||
--- |
||||
|
||||
**Describe the bug** |
||||
Please provide details of the problem, including the version of Spring Cloud that you |
||||
are using. |
||||
|
||||
**Sample** |
||||
If possible, please provide a test case or sample application that reproduces |
||||
the problem. This makes it much easier for us to diagnose the problem and to verify that |
||||
we have fixed it. |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
--- |
||||
name: Feature request |
||||
about: Suggest an idea for this project |
||||
title: '' |
||||
labels: waiting-for-triage |
||||
assignees: '' |
||||
|
||||
--- |
||||
|
||||
**Is your feature request related to a problem? Please describe.** |
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] |
||||
|
||||
**Describe the solution you'd like** |
||||
A clear and concise description of what you want to happen. |
||||
|
||||
**Describe alternatives you've considered** |
||||
A clear and concise description of any alternative solutions or features you've considered. |
||||
|
||||
**Additional context** |
||||
Add any other context or screenshots about the feature request here. |
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
version: 2 |
||||
updates: |
||||
- package-ecosystem: "github-actions" |
||||
directory: "/" |
||||
target-branch: "3.1.x" # oldest OSS supported branch |
||||
schedule: |
||||
interval: "weekly" |
||||
- package-ecosystem: "github-actions" |
||||
directory: "/" |
||||
target-branch: "4.0.x" # oldest OSS supported branch |
||||
schedule: |
||||
interval: "weekly" |
||||
- package-ecosystem: "github-actions" |
||||
directory: "/" |
||||
target-branch: "main" |
||||
schedule: |
||||
interval: "weekly" |
||||
- package-ecosystem: maven |
||||
directory: / |
||||
schedule: |
||||
interval: daily |
||||
target-branch: 3.1.x |
||||
ignore: |
||||
# only upgrade patch versions for maintenance branch |
||||
- dependency-name: "*" |
||||
update-types: |
||||
- version-update:semver-major |
||||
- version-update:semver-minor |
||||
- package-ecosystem: maven |
||||
directory: / |
||||
schedule: |
||||
interval: daily |
||||
target-branch: 4.0.x |
||||
ignore: |
||||
# only upgrade patch versions for maintenance branch |
||||
- dependency-name: "*" |
||||
update-types: |
||||
- version-update:semver-major |
||||
- version-update:semver-minor |
||||
- package-ecosystem: maven |
||||
directory: / |
||||
schedule: |
||||
interval: daily |
||||
target-branch: main |
||||
ignore: |
||||
# only upgrade by minor or patch |
||||
- dependency-name: "*" |
||||
update-types: |
||||
- version-update:semver-major |
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
name: Deploy Docs |
||||
on: |
||||
push: |
||||
branches-ignore: [ gh-pages ] |
||||
tags: '**' |
||||
repository_dispatch: |
||||
types: request-build-reference # legacy |
||||
#schedule: |
||||
#- cron: '0 10 * * *' # Once per day at 10am UTC |
||||
workflow_dispatch: |
||||
permissions: |
||||
actions: write |
||||
jobs: |
||||
build: |
||||
runs-on: ubuntu-latest |
||||
# if: github.repository_owner == 'spring-cloud' |
||||
steps: |
||||
- name: Checkout |
||||
uses: actions/checkout@v4 |
||||
with: |
||||
ref: docs-build |
||||
fetch-depth: 1 |
||||
- name: Dispatch (partial build) |
||||
if: github.ref_type == 'branch' |
||||
env: |
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||
run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD) -f build-refname=${{ github.ref_name }} |
||||
- name: Dispatch (full build) |
||||
if: github.ref_type == 'tag' |
||||
env: |
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||
run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD) |
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
# This workflow will build a Java project with Maven |
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven |
||||
|
||||
name: Build |
||||
|
||||
on: |
||||
push: |
||||
branches: [ main, 3.1.x ] |
||||
pull_request: |
||||
branches: [ main, 3.1.x ] |
||||
|
||||
jobs: |
||||
build: |
||||
|
||||
runs-on: ubuntu-latest |
||||
|
||||
steps: |
||||
- uses: actions/checkout@v4 |
||||
- name: Set up JDK |
||||
uses: actions/setup-java@v3 |
||||
with: |
||||
distribution: 'temurin' |
||||
java-version: '17' |
||||
- name: Cache local Maven repository |
||||
uses: actions/cache@v3 |
||||
with: |
||||
path: ~/.m2/repository |
||||
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} |
||||
restore-keys: | |
||||
${{ runner.os }}-maven- |
||||
- name: Build with Maven |
||||
run: ./mvnw clean install -B -U -Pspring -Dmaven.test.redirectTestOutputToFile=true -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 |
||||
- name: Publish Test Report |
||||
uses: mikepenz/action-junit-report@v4 |
||||
if: always() # always run even if the previous step fails |
||||
with: |
||||
report_paths: '**/surefire-reports/TEST-*.xml' |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
-Xmx1024m -XX:CICompilerCount=1 -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom |
@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one |
||||
# or more contributor license agreements. See the NOTICE file |
||||
# distributed with this work for additional information |
||||
# regarding copyright ownership. The ASF licenses this file |
||||
# to you under the Apache License, Version 2.0 (the |
||||
# "License"); you may not use this file except in compliance |
||||
# with the License. You may obtain a copy of the License at |
||||
# |
||||
# https://www.apache.org/licenses/LICENSE-2.0 |
||||
# |
||||
# Unless required by applicable law or agreed to in writing, |
||||
# software distributed under the License is distributed on an |
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
||||
# KIND, either express or implied. See the License for the |
||||
# specific language governing permissions and limitations |
||||
# under the License. |
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.0/apache-maven-3.9.0-bin.zip |
||||
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar |
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
# Enable auto-env through the sdkman_auto_env config |
||||
# Add key=value pairs of SDKs to use below |
||||
java=17.0.1-tem |
@ -0,0 +1,83 @@
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!-- |
||||
~ Copyright 2013-2017 the original author or authors. |
||||
~ |
||||
~ Licensed under the Apache License, Version 2.0 (the "License"); |
||||
~ you may not use this file except in compliance with the License. |
||||
~ You may obtain a copy of the License at |
||||
~ |
||||
~ https://www.apache.org/licenses/LICENSE-2.0 |
||||
~ |
||||
~ Unless required by applicable law or agreed to in writing, software |
||||
~ distributed under the License is distributed on an "AS IS" BASIS, |
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
~ See the License for the specific language governing permissions and |
||||
~ limitations under the License. |
||||
~ |
||||
--> |
||||
|
||||
<settings> |
||||
<servers> |
||||
<server> |
||||
<id>repo.spring.io</id> |
||||
<username>${env.CI_DEPLOY_USERNAME}</username> |
||||
<password>${env.CI_DEPLOY_PASSWORD}</password> |
||||
</server> |
||||
</servers> |
||||
<profiles> |
||||
<profile> |
||||
<!-- |
||||
N.B. this profile is only here to support users and IDEs that do not use Maven 3.3. |
||||
It isn't needed on the command line if you use the wrapper script (mvnw) or if you use |
||||
a native Maven with the right version. Eclipse users should points their Maven tooling to |
||||
this settings file, or copy the profile into their ~/.m2/settings.xml. |
||||
--> |
||||
<id>spring</id> |
||||
<activation><activeByDefault>true</activeByDefault></activation> |
||||
<repositories> |
||||
<repository> |
||||
<id>spring-snapshots</id> |
||||
<name>Spring Snapshots</name> |
||||
<url>https://repo.spring.io/libs-snapshot-local</url> |
||||
<snapshots> |
||||
<enabled>true</enabled> |
||||
</snapshots> |
||||
</repository> |
||||
<repository> |
||||
<id>spring-milestones</id> |
||||
<name>Spring Milestones</name> |
||||
<url>https://repo.spring.io/libs-milestone-local</url> |
||||
<snapshots> |
||||
<enabled>false</enabled> |
||||
</snapshots> |
||||
</repository> |
||||
<repository> |
||||
<id>spring-releases</id> |
||||
<name>Spring Releases</name> |
||||
<url>https://repo.spring.io/release</url> |
||||
<snapshots> |
||||
<enabled>false</enabled> |
||||
</snapshots> |
||||
</repository> |
||||
</repositories> |
||||
<pluginRepositories> |
||||
<pluginRepository> |
||||
<id>spring-snapshots</id> |
||||
<name>Spring Snapshots</name> |
||||
<url>https://repo.spring.io/libs-snapshot-local</url> |
||||
<snapshots> |
||||
<enabled>true</enabled> |
||||
</snapshots> |
||||
</pluginRepository> |
||||
<pluginRepository> |
||||
<id>spring-milestones</id> |
||||
<name>Spring Milestones</name> |
||||
<url>https://repo.spring.io/libs-milestone-local</url> |
||||
<snapshots> |
||||
<enabled>false</enabled> |
||||
</snapshots> |
||||
</pluginRepository> |
||||
</pluginRepositories> |
||||
</profile> |
||||
</profiles> |
||||
</settings> |
@ -1,3 +0,0 @@
@@ -1,3 +0,0 @@
|
||||
{ |
||||
"java.configuration.updateBuildConfiguration": "automatic" |
||||
} |
@ -1,35 +0,0 @@
@@ -1,35 +0,0 @@
|
||||
/* |
||||
code highlight CSS resemblign the Eclipse IDE default color schema |
||||
@author Costin Leau |
||||
*/ |
||||
|
||||
.hl-keyword { |
||||
color: #7F0055; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.hl-comment { |
||||
color: #3F5F5F; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-multiline-comment { |
||||
color: #3F5FBF; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-tag { |
||||
color: #3F7F7F; |
||||
} |
||||
|
||||
.hl-attribute { |
||||
color: #7F007F; |
||||
} |
||||
|
||||
.hl-value { |
||||
color: #2A00FF; |
||||
} |
||||
|
||||
.hl-string { |
||||
color: #2A00FF; |
||||
} |
@ -1,9 +0,0 @@
@@ -1,9 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body.firstpage { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: none; |
||||
} |
@ -1,6 +0,0 @@
@@ -1,6 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
@ -1,344 +0,0 @@
@@ -1,344 +0,0 @@
|
||||
@IMPORT url("highlight.css"); |
||||
|
||||
html { |
||||
padding: 0pt; |
||||
margin: 0pt; |
||||
} |
||||
|
||||
body { |
||||
color: #333333; |
||||
margin: 15px 30px; |
||||
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif; |
||||
line-height: 1.6; |
||||
-webkit-font-smoothing: antialiased; |
||||
} |
||||
|
||||
code { |
||||
font-size: 16px; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
:not(a)>code { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
:not(pre)>code { |
||||
background-color: #F2F2F2; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 4px; |
||||
padding: 1px 3px 0; |
||||
text-shadow: none; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
body>*:first-child { |
||||
margin-top: 0 !important; |
||||
} |
||||
|
||||
div { |
||||
margin: 0pt; |
||||
} |
||||
|
||||
hr { |
||||
border: 1px solid #CCCCCC; |
||||
background: #CCCCCC; |
||||
} |
||||
|
||||
h1,h2,h3,h4,h5,h6 { |
||||
color: #000000; |
||||
cursor: text; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px; |
||||
padding: 0; |
||||
} |
||||
|
||||
h1,h2,h3 { |
||||
margin: 40px 0 10px; |
||||
} |
||||
|
||||
h1 { |
||||
margin: 70px 0 30px; |
||||
padding-top: 20px; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: 1px dotted #CCCCCC; |
||||
} |
||||
|
||||
h1,h1 code { |
||||
font-size: 32px; |
||||
} |
||||
|
||||
h2,h2 code { |
||||
font-size: 24px; |
||||
} |
||||
|
||||
h3,h3 code { |
||||
font-size: 20px; |
||||
} |
||||
|
||||
h4,h1 code,h5,h5 code,h6,h6 code { |
||||
font-size: 18px; |
||||
} |
||||
|
||||
div.book,div.chapter,div.appendix,div.part,div.preface { |
||||
min-width: 300px; |
||||
max-width: 1200px; |
||||
margin: 0 auto; |
||||
} |
||||
|
||||
p.releaseinfo { |
||||
font-weight: bold; |
||||
margin-bottom: 40px; |
||||
margin-top: 40px; |
||||
} |
||||
|
||||
div.authorgroup { |
||||
line-height: 1; |
||||
} |
||||
|
||||
p.copyright { |
||||
line-height: 1; |
||||
margin-bottom: -5px; |
||||
} |
||||
|
||||
.legalnotice p { |
||||
font-style: italic; |
||||
font-size: 14px; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.titlepage+p,div.titlepage+p { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
pre { |
||||
line-height: 1.0; |
||||
color: black; |
||||
} |
||||
|
||||
a { |
||||
color: #4183C4; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
p { |
||||
margin: 15px 0; |
||||
text-align: left; |
||||
} |
||||
|
||||
ul,ol { |
||||
padding-left: 30px; |
||||
} |
||||
|
||||
li p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.table { |
||||
margin: 1em; |
||||
padding: 0.5em; |
||||
text-align: center; |
||||
} |
||||
|
||||
div.table table,div.informaltable table { |
||||
display: table; |
||||
width: 100%; |
||||
} |
||||
|
||||
div.table td { |
||||
padding-left: 7px; |
||||
padding-right: 7px; |
||||
} |
||||
|
||||
.sidebar { |
||||
line-height: 1.4; |
||||
padding: 0 20px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
} |
||||
|
||||
.sidebar p.title { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
pre.programlisting,pre.screen { |
||||
font-size: 15px; |
||||
padding: 6px 10px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
clear: both; |
||||
overflow: auto; |
||||
line-height: 1.4; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
table { |
||||
border-collapse: collapse; |
||||
border-spacing: 0; |
||||
border: 1px solid #DDDDDD !important; |
||||
border-radius: 4px !important; |
||||
border-collapse: separate !important; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
table thead { |
||||
background: #F5F5F5; |
||||
} |
||||
|
||||
table tr { |
||||
border: none; |
||||
border-bottom: none; |
||||
} |
||||
|
||||
table th { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
table th,table td { |
||||
border: none !important; |
||||
padding: 6px 13px; |
||||
} |
||||
|
||||
table tr:nth-child(2n) { |
||||
background-color: #F8F8F8; |
||||
} |
||||
|
||||
td p { |
||||
margin: 0 0 15px 0; |
||||
} |
||||
|
||||
div.table-contents td p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist * |
||||
{ |
||||
border: none !important; |
||||
background: none !important; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important p,div.note p,div.tip p,div.warning p { |
||||
color: #6F6F6F; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
div.important code,div.note code,div.tip code,div.warning code { |
||||
background-color: #F2F2F2 !important; |
||||
border: 1px solid #CCCCCC !important; |
||||
border-radius: 4px !important; |
||||
padding: 1px 3px 0 !important; |
||||
text-shadow: none !important; |
||||
white-space: nowrap !important; |
||||
} |
||||
|
||||
.note th,.tip th,.warning th { |
||||
display: none; |
||||
} |
||||
|
||||
.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td |
||||
{ |
||||
border-right: 1px solid #CCCCCC !important; |
||||
padding-top: 10px; |
||||
} |
||||
|
||||
div.calloutlist p,div.calloutlist td { |
||||
padding: 0; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.calloutlist>table>tbody>tr>td:first-child { |
||||
padding-left: 10px; |
||||
width: 30px !important; |
||||
} |
||||
|
||||
div.important,div.note,div.tip,div.warning { |
||||
margin-left: 0px !important; |
||||
margin-right: 20px !important; |
||||
margin-top: 20px; |
||||
margin-bottom: 20px; |
||||
padding-top: 10px; |
||||
padding-bottom: 10px; |
||||
} |
||||
|
||||
div.toc { |
||||
line-height: 1.2; |
||||
} |
||||
|
||||
dl,dt { |
||||
margin-top: 1px; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
div.toc>dl>dt { |
||||
font-size: 32px; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dt { |
||||
font-size: 24px; |
||||
font-weight: bold; |
||||
margin: 20px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dd>dl>dt { |
||||
font-weight: bold; |
||||
font-size: 20px; |
||||
margin: 10px 0 0 0; |
||||
} |
||||
|
||||
tbody.footnotes * { |
||||
border: none !important; |
||||
} |
||||
|
||||
div.footnote p { |
||||
margin: 0; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.footnote p sup { |
||||
margin-right: 6px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
div.navheader { |
||||
border-bottom: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
div.navfooter { |
||||
border-top: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
.title { |
||||
margin-left: -1em; |
||||
padding-left: 1em; |
||||
} |
||||
|
||||
.title>a { |
||||
position: absolute; |
||||
visibility: hidden; |
||||
display: block; |
||||
font-size: 0.85em; |
||||
margin-top: 0.05em; |
||||
margin-left: -1em; |
||||
vertical-align: text-top; |
||||
color: black; |
||||
} |
||||
|
||||
.title>a:before { |
||||
content: "\00A7"; |
||||
} |
||||
|
||||
.title:hover>a,.title>a:hover,.title:hover>a:hover { |
||||
visibility: visible; |
||||
} |
||||
|
||||
.title:focus>a,.title>a:focus,.title:focus>a:focus { |
||||
outline: 0; |
||||
} |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 329 B |
Before Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 350 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 931 B |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 178 KiB |
@ -1,117 +0,0 @@
@@ -1,117 +0,0 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<meta name="generator" content="Asciidoctor 1.5.5"> |
||||
<title>spring-cloud-gateway</title> |
||||
<link rel="stylesheet" href="css/manual-singlepage.css"> |
||||
<style> |
||||
.hidden { |
||||
display: none; |
||||
} |
||||
|
||||
.switch { |
||||
border-width: 1px 1px 0 1px; |
||||
border-style: solid; |
||||
border-color: #7a2518; |
||||
display: inline-block; |
||||
} |
||||
|
||||
.switch--item { |
||||
padding: 10px; |
||||
background-color: #ffffff; |
||||
color: #7a2518; |
||||
display: inline-block; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.switch--item.selected { |
||||
background-color: #7a2519; |
||||
color: #ffffff; |
||||
} |
||||
</style> |
||||
<script src="http://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js"></script> |
||||
<script type="text/javascript"> |
||||
function addBlockSwitches() { |
||||
$('.primary').each(function() { |
||||
primary = $(this); |
||||
createSwitchItem(primary, createBlockSwitch(primary)).item.addClass("selected"); |
||||
primary.children('.title').remove(); |
||||
}); |
||||
$('.secondary').each(function(idx, node) { |
||||
secondary = $(node); |
||||
primary = findPrimary(secondary); |
||||
switchItem = createSwitchItem(secondary, primary.children('.switch')); |
||||
switchItem.content.addClass('hidden'); |
||||
findPrimary(secondary).append(switchItem.content); |
||||
secondary.remove(); |
||||
}); |
||||
} |
||||
|
||||
function createBlockSwitch(primary) { |
||||
blockSwitch = $('<div class="switch"></div>'); |
||||
primary.prepend(blockSwitch); |
||||
return blockSwitch; |
||||
} |
||||
|
||||
function findPrimary(secondary) { |
||||
candidate = secondary.prev(); |
||||
while (!candidate.is('.primary')) { |
||||
candidate = candidate.prev(); |
||||
} |
||||
return candidate; |
||||
} |
||||
|
||||
function createSwitchItem(block, blockSwitch) { |
||||
blockName = block.children('.title').text(); |
||||
content = block.children('.content').first().append(block.next('.colist')); |
||||
item = $('<div class="switch--item">' + blockName + '</div>'); |
||||
item.on('click', '', content, function(e) { |
||||
$(this).addClass('selected'); |
||||
$(this).siblings().removeClass('selected'); |
||||
e.data.siblings('.content').addClass('hidden'); |
||||
e.data.removeClass('hidden'); |
||||
}); |
||||
blockSwitch.append(item); |
||||
return {'item': item, 'content': content}; |
||||
} |
||||
|
||||
$(addBlockSwitches); |
||||
</script> |
||||
</head> |
||||
|
||||
<body class="article"> |
||||
<div id="header"> |
||||
<h1>spring-cloud-gateway</h1> |
||||
</div> |
||||
<div id="content"> |
||||
<div id="preamble"> |
||||
<div class="sectionbody"> |
||||
<div class="paragraph"> |
||||
<p>1.0.4.BUILD-SNAPSHOT</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="sect1"> |
||||
<h2 id="_pick_the_documentation_option">Pick The Documentation Option</h2> |
||||
<div class="sectionbody"> |
||||
<div class="ulist"> |
||||
<ul> |
||||
<li> |
||||
<p><a href="single/spring-cloud-gateway.html">Single HTML</a></p> |
||||
</li> |
||||
<li> |
||||
<p><a href="multi/multi_spring-cloud-gateway.html">Multi HTML</a></p> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css"> |
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js"></script> |
||||
<script>prettyPrint()</script> |
||||
</body> |
||||
</html> |
@ -1,35 +0,0 @@
@@ -1,35 +0,0 @@
|
||||
/* |
||||
code highlight CSS resemblign the Eclipse IDE default color schema |
||||
@author Costin Leau |
||||
*/ |
||||
|
||||
.hl-keyword { |
||||
color: #7F0055; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.hl-comment { |
||||
color: #3F5F5F; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-multiline-comment { |
||||
color: #3F5FBF; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-tag { |
||||
color: #3F7F7F; |
||||
} |
||||
|
||||
.hl-attribute { |
||||
color: #7F007F; |
||||
} |
||||
|
||||
.hl-value { |
||||
color: #2A00FF; |
||||
} |
||||
|
||||
.hl-string { |
||||
color: #2A00FF; |
||||
} |
@ -1,9 +0,0 @@
@@ -1,9 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body.firstpage { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: none; |
||||
} |
@ -1,6 +0,0 @@
@@ -1,6 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
@ -1,344 +0,0 @@
@@ -1,344 +0,0 @@
|
||||
@IMPORT url("highlight.css"); |
||||
|
||||
html { |
||||
padding: 0pt; |
||||
margin: 0pt; |
||||
} |
||||
|
||||
body { |
||||
color: #333333; |
||||
margin: 15px 30px; |
||||
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif; |
||||
line-height: 1.6; |
||||
-webkit-font-smoothing: antialiased; |
||||
} |
||||
|
||||
code { |
||||
font-size: 16px; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
:not(a)>code { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
:not(pre)>code { |
||||
background-color: #F2F2F2; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 4px; |
||||
padding: 1px 3px 0; |
||||
text-shadow: none; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
body>*:first-child { |
||||
margin-top: 0 !important; |
||||
} |
||||
|
||||
div { |
||||
margin: 0pt; |
||||
} |
||||
|
||||
hr { |
||||
border: 1px solid #CCCCCC; |
||||
background: #CCCCCC; |
||||
} |
||||
|
||||
h1,h2,h3,h4,h5,h6 { |
||||
color: #000000; |
||||
cursor: text; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px; |
||||
padding: 0; |
||||
} |
||||
|
||||
h1,h2,h3 { |
||||
margin: 40px 0 10px; |
||||
} |
||||
|
||||
h1 { |
||||
margin: 70px 0 30px; |
||||
padding-top: 20px; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: 1px dotted #CCCCCC; |
||||
} |
||||
|
||||
h1,h1 code { |
||||
font-size: 32px; |
||||
} |
||||
|
||||
h2,h2 code { |
||||
font-size: 24px; |
||||
} |
||||
|
||||
h3,h3 code { |
||||
font-size: 20px; |
||||
} |
||||
|
||||
h4,h1 code,h5,h5 code,h6,h6 code { |
||||
font-size: 18px; |
||||
} |
||||
|
||||
div.book,div.chapter,div.appendix,div.part,div.preface { |
||||
min-width: 300px; |
||||
max-width: 1200px; |
||||
margin: 0 auto; |
||||
} |
||||
|
||||
p.releaseinfo { |
||||
font-weight: bold; |
||||
margin-bottom: 40px; |
||||
margin-top: 40px; |
||||
} |
||||
|
||||
div.authorgroup { |
||||
line-height: 1; |
||||
} |
||||
|
||||
p.copyright { |
||||
line-height: 1; |
||||
margin-bottom: -5px; |
||||
} |
||||
|
||||
.legalnotice p { |
||||
font-style: italic; |
||||
font-size: 14px; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.titlepage+p,div.titlepage+p { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
pre { |
||||
line-height: 1.0; |
||||
color: black; |
||||
} |
||||
|
||||
a { |
||||
color: #4183C4; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
p { |
||||
margin: 15px 0; |
||||
text-align: left; |
||||
} |
||||
|
||||
ul,ol { |
||||
padding-left: 30px; |
||||
} |
||||
|
||||
li p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.table { |
||||
margin: 1em; |
||||
padding: 0.5em; |
||||
text-align: center; |
||||
} |
||||
|
||||
div.table table,div.informaltable table { |
||||
display: table; |
||||
width: 100%; |
||||
} |
||||
|
||||
div.table td { |
||||
padding-left: 7px; |
||||
padding-right: 7px; |
||||
} |
||||
|
||||
.sidebar { |
||||
line-height: 1.4; |
||||
padding: 0 20px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
} |
||||
|
||||
.sidebar p.title { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
pre.programlisting,pre.screen { |
||||
font-size: 15px; |
||||
padding: 6px 10px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
clear: both; |
||||
overflow: auto; |
||||
line-height: 1.4; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
table { |
||||
border-collapse: collapse; |
||||
border-spacing: 0; |
||||
border: 1px solid #DDDDDD !important; |
||||
border-radius: 4px !important; |
||||
border-collapse: separate !important; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
table thead { |
||||
background: #F5F5F5; |
||||
} |
||||
|
||||
table tr { |
||||
border: none; |
||||
border-bottom: none; |
||||
} |
||||
|
||||
table th { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
table th,table td { |
||||
border: none !important; |
||||
padding: 6px 13px; |
||||
} |
||||
|
||||
table tr:nth-child(2n) { |
||||
background-color: #F8F8F8; |
||||
} |
||||
|
||||
td p { |
||||
margin: 0 0 15px 0; |
||||
} |
||||
|
||||
div.table-contents td p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist * |
||||
{ |
||||
border: none !important; |
||||
background: none !important; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important p,div.note p,div.tip p,div.warning p { |
||||
color: #6F6F6F; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
div.important code,div.note code,div.tip code,div.warning code { |
||||
background-color: #F2F2F2 !important; |
||||
border: 1px solid #CCCCCC !important; |
||||
border-radius: 4px !important; |
||||
padding: 1px 3px 0 !important; |
||||
text-shadow: none !important; |
||||
white-space: nowrap !important; |
||||
} |
||||
|
||||
.note th,.tip th,.warning th { |
||||
display: none; |
||||
} |
||||
|
||||
.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td |
||||
{ |
||||
border-right: 1px solid #CCCCCC !important; |
||||
padding-top: 10px; |
||||
} |
||||
|
||||
div.calloutlist p,div.calloutlist td { |
||||
padding: 0; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.calloutlist>table>tbody>tr>td:first-child { |
||||
padding-left: 10px; |
||||
width: 30px !important; |
||||
} |
||||
|
||||
div.important,div.note,div.tip,div.warning { |
||||
margin-left: 0px !important; |
||||
margin-right: 20px !important; |
||||
margin-top: 20px; |
||||
margin-bottom: 20px; |
||||
padding-top: 10px; |
||||
padding-bottom: 10px; |
||||
} |
||||
|
||||
div.toc { |
||||
line-height: 1.2; |
||||
} |
||||
|
||||
dl,dt { |
||||
margin-top: 1px; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
div.toc>dl>dt { |
||||
font-size: 32px; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dt { |
||||
font-size: 24px; |
||||
font-weight: bold; |
||||
margin: 20px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dd>dl>dt { |
||||
font-weight: bold; |
||||
font-size: 20px; |
||||
margin: 10px 0 0 0; |
||||
} |
||||
|
||||
tbody.footnotes * { |
||||
border: none !important; |
||||
} |
||||
|
||||
div.footnote p { |
||||
margin: 0; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.footnote p sup { |
||||
margin-right: 6px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
div.navheader { |
||||
border-bottom: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
div.navfooter { |
||||
border-top: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
.title { |
||||
margin-left: -1em; |
||||
padding-left: 1em; |
||||
} |
||||
|
||||
.title>a { |
||||
position: absolute; |
||||
visibility: hidden; |
||||
display: block; |
||||
font-size: 0.85em; |
||||
margin-top: 0.05em; |
||||
margin-left: -1em; |
||||
vertical-align: text-top; |
||||
color: black; |
||||
} |
||||
|
||||
.title>a:before { |
||||
content: "\00A7"; |
||||
} |
||||
|
||||
.title:hover>a,.title>a:hover,.title:hover>a:hover { |
||||
visibility: visible; |
||||
} |
||||
|
||||
.title:focus>a,.title>a:focus,.title:focus>a:focus { |
||||
outline: 0; |
||||
} |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 329 B |
Before Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 350 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 931 B |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 178 KiB |
@ -1,19 +0,0 @@
@@ -1,19 +0,0 @@
|
||||
<html><head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
<title>2. Building a Gateway Using Spring MVC</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-gateway.html" title="Spring Cloud Gateway"><link rel="up" href="multi_spring-cloud-gateway.html" title="Spring Cloud Gateway"><link rel="prev" href="multi_gateway-starter.html" title="1. How to Include Spring Cloud Gateway"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2. Building a Gateway Using Spring MVC</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi_gateway-starter.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="_building_a_gateway_using_spring_mvc" href="#_building_a_gateway_using_spring_mvc"></a>2. Building a Gateway Using Spring MVC</h1></div></div></div><p>Spring Cloud Gateway provides a utility object called <code class="literal">ProxyExchange</code> which you can use inside a regular Spring MVC handler as a method parameter. It supports basic downstream HTTP exchanges via methods that mirror the HTTP verbs, or forwarding to a local handler via the <code class="literal">forward()</code> method.</p><p>Example (proxying a request to "/test" downstream to a remote server):</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@RestController</span></em> |
||||
<em><span class="hl-annotation" style="color: gray">@SpringBootApplication</span></em> |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> GatewaySampleApplication { |
||||
|
||||
<em><span class="hl-annotation" style="color: gray">@Value("${remote.home}")</span></em> |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> URI home; |
||||
|
||||
<em><span class="hl-annotation" style="color: gray">@GetMapping("/test")</span></em> |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> ResponseEntity<?> proxy(ProxyExchange<Object> proxy) <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">throws</span> Exception { |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> proxy.uri(home.toString() + <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"/image/png"</span>).get(); |
||||
} |
||||
|
||||
}</pre><p>There are convenience methods on the <code class="literal">ProxyExchange</code> to enable the handler method to discover and enhance the URI path of the incoming request. For example you might want to extract the trailing elements of a path to pass them downstream:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@GetMapping("/proxy/path/**")</span></em> |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> ResponseEntity<?> proxyPath(ProxyExchange<?> proxy) <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">throws</span> Exception { |
||||
String path = proxy.path(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"/proxy/path/"</span>); |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> proxy.uri(home.toString() + <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"/foos/"</span> + path).get(); |
||||
}</pre><p>All the features of Spring MVC are available to Gateway handler methods. So you can inject request headers and query parameters, for instance, and you can constrain the incoming requests with declarations in the mapping annotation. See the documentation for <code class="literal">@RequestMapping</code> in Spring MVC for more details of those features.</p><p>Headers can be added to the downstream response using the <code class="literal">header()</code> methods on <code class="literal">ProxyExchange</code>.</p><p>You can also manipulate response headers (and anything else you like in the response) by adding a mapper to the <code class="literal">get()</code> etc. method. The mapper is a <code class="literal">Function</code> that takes the incoming <code class="literal">ResponseEntity</code> and converts it to an outgoing one.</p><p>First class support is provided for "sensitive" headers ("cookie" and "authorization" by default) which are not passed downstream, and for "proxy" headers (<code class="literal">x-forwarded-*</code>).</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_gateway-starter.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">1. How to Include Spring Cloud Gateway </td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-gateway.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html> |
@ -1,3 +0,0 @@
@@ -1,3 +0,0 @@
|
||||
<html><head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
<title>1. How to Include Spring Cloud Gateway</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-gateway.html" title="Spring Cloud Gateway"><link rel="up" href="multi_spring-cloud-gateway.html" title="Spring Cloud Gateway"><link rel="prev" href="multi_pr01.html" title=""><link rel="next" href="multi__building_a_gateway_using_spring_mvc.html" title="2. Building a Gateway Using Spring MVC"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1. How to Include Spring Cloud Gateway</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi_pr01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="multi__building_a_gateway_using_spring_mvc.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="gateway-starter" href="#gateway-starter"></a>1. How to Include Spring Cloud Gateway</h1></div></div></div><p>To include Spring Cloud Gateway in your project add a dependency with group <code class="literal">org.springframework.cloud</code> and artifact id <code class="literal">spring-cloud-gateway-mvc</code>. See the <a class="link" href="https://projects.spring.io/spring-cloud/" target="_top">Spring Cloud Project page</a> for details on setting up your build system with the current Spring Cloud Release Train.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_pr01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="multi__building_a_gateway_using_spring_mvc.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-gateway.html">Home</a></td><td width="40%" align="right" valign="top"> 2. Building a Gateway Using Spring MVC</td></tr></table></div></body></html> |
@ -1,3 +0,0 @@
@@ -1,3 +0,0 @@
|
||||
<html><head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
<title></title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-gateway.html" title="Spring Cloud Gateway"><link rel="up" href="multi_spring-cloud-gateway.html" title="Spring Cloud Gateway"><link rel="prev" href="multi_spring-cloud-gateway.html" title="Spring Cloud Gateway"><link rel="next" href="multi_gateway-starter.html" title="1. How to Include Spring Cloud Gateway"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi_spring-cloud-gateway.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="multi_gateway-starter.html">Next</a></td></tr></table><hr></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="d0e9" href="#d0e9"></a></h1></div></div></div><p><span class="strong"><strong>1.0.4.BUILD-SNAPSHOT</strong></span></p><p>This project provides a library for building an API Gateway on top of Spring MVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="multi_spring-cloud-gateway.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="multi_gateway-starter.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Spring Cloud Gateway </td><td width="20%" align="center"><a accesskey="h" href="multi_spring-cloud-gateway.html">Home</a></td><td width="40%" align="right" valign="top"> 1. How to Include Spring Cloud Gateway</td></tr></table></div></body></html> |
@ -1,3 +0,0 @@
@@ -1,3 +0,0 @@
|
||||
<html><head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
<title>Spring Cloud Gateway</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-gateway.html" title="Spring Cloud Gateway"><link rel="next" href="multi_pr01.html" title=""></head><body class="firstpage" bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Spring Cloud Gateway</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="multi_pr01.html">Next</a></td></tr></table><hr></div><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d0e3"></a>Spring Cloud Gateway</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="multi_pr01.html"></a></span></dt><dt><span class="chapter"><a href="multi_gateway-starter.html">1. How to Include Spring Cloud Gateway</a></span></dt><dt><span class="chapter"><a href="multi__building_a_gateway_using_spring_mvc.html">2. Building a Gateway Using Spring MVC</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="multi_pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html> |
@ -1,35 +0,0 @@
@@ -1,35 +0,0 @@
|
||||
/* |
||||
code highlight CSS resemblign the Eclipse IDE default color schema |
||||
@author Costin Leau |
||||
*/ |
||||
|
||||
.hl-keyword { |
||||
color: #7F0055; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.hl-comment { |
||||
color: #3F5F5F; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-multiline-comment { |
||||
color: #3F5FBF; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-tag { |
||||
color: #3F7F7F; |
||||
} |
||||
|
||||
.hl-attribute { |
||||
color: #7F007F; |
||||
} |
||||
|
||||
.hl-value { |
||||
color: #2A00FF; |
||||
} |
||||
|
||||
.hl-string { |
||||
color: #2A00FF; |
||||
} |
@ -1,9 +0,0 @@
@@ -1,9 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body.firstpage { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: none; |
||||
} |
@ -1,6 +0,0 @@
@@ -1,6 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
@ -1,344 +0,0 @@
@@ -1,344 +0,0 @@
|
||||
@IMPORT url("highlight.css"); |
||||
|
||||
html { |
||||
padding: 0pt; |
||||
margin: 0pt; |
||||
} |
||||
|
||||
body { |
||||
color: #333333; |
||||
margin: 15px 30px; |
||||
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif; |
||||
line-height: 1.6; |
||||
-webkit-font-smoothing: antialiased; |
||||
} |
||||
|
||||
code { |
||||
font-size: 16px; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
:not(a)>code { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
:not(pre)>code { |
||||
background-color: #F2F2F2; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 4px; |
||||
padding: 1px 3px 0; |
||||
text-shadow: none; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
body>*:first-child { |
||||
margin-top: 0 !important; |
||||
} |
||||
|
||||
div { |
||||
margin: 0pt; |
||||
} |
||||
|
||||
hr { |
||||
border: 1px solid #CCCCCC; |
||||
background: #CCCCCC; |
||||
} |
||||
|
||||
h1,h2,h3,h4,h5,h6 { |
||||
color: #000000; |
||||
cursor: text; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px; |
||||
padding: 0; |
||||
} |
||||
|
||||
h1,h2,h3 { |
||||
margin: 40px 0 10px; |
||||
} |
||||
|
||||
h1 { |
||||
margin: 70px 0 30px; |
||||
padding-top: 20px; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: 1px dotted #CCCCCC; |
||||
} |
||||
|
||||
h1,h1 code { |
||||
font-size: 32px; |
||||
} |
||||
|
||||
h2,h2 code { |
||||
font-size: 24px; |
||||
} |
||||
|
||||
h3,h3 code { |
||||
font-size: 20px; |
||||
} |
||||
|
||||
h4,h1 code,h5,h5 code,h6,h6 code { |
||||
font-size: 18px; |
||||
} |
||||
|
||||
div.book,div.chapter,div.appendix,div.part,div.preface { |
||||
min-width: 300px; |
||||
max-width: 1200px; |
||||
margin: 0 auto; |
||||
} |
||||
|
||||
p.releaseinfo { |
||||
font-weight: bold; |
||||
margin-bottom: 40px; |
||||
margin-top: 40px; |
||||
} |
||||
|
||||
div.authorgroup { |
||||
line-height: 1; |
||||
} |
||||
|
||||
p.copyright { |
||||
line-height: 1; |
||||
margin-bottom: -5px; |
||||
} |
||||
|
||||
.legalnotice p { |
||||
font-style: italic; |
||||
font-size: 14px; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.titlepage+p,div.titlepage+p { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
pre { |
||||
line-height: 1.0; |
||||
color: black; |
||||
} |
||||
|
||||
a { |
||||
color: #4183C4; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
p { |
||||
margin: 15px 0; |
||||
text-align: left; |
||||
} |
||||
|
||||
ul,ol { |
||||
padding-left: 30px; |
||||
} |
||||
|
||||
li p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.table { |
||||
margin: 1em; |
||||
padding: 0.5em; |
||||
text-align: center; |
||||
} |
||||
|
||||
div.table table,div.informaltable table { |
||||
display: table; |
||||
width: 100%; |
||||
} |
||||
|
||||
div.table td { |
||||
padding-left: 7px; |
||||
padding-right: 7px; |
||||
} |
||||
|
||||
.sidebar { |
||||
line-height: 1.4; |
||||
padding: 0 20px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
} |
||||
|
||||
.sidebar p.title { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
pre.programlisting,pre.screen { |
||||
font-size: 15px; |
||||
padding: 6px 10px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
clear: both; |
||||
overflow: auto; |
||||
line-height: 1.4; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
table { |
||||
border-collapse: collapse; |
||||
border-spacing: 0; |
||||
border: 1px solid #DDDDDD !important; |
||||
border-radius: 4px !important; |
||||
border-collapse: separate !important; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
table thead { |
||||
background: #F5F5F5; |
||||
} |
||||
|
||||
table tr { |
||||
border: none; |
||||
border-bottom: none; |
||||
} |
||||
|
||||
table th { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
table th,table td { |
||||
border: none !important; |
||||
padding: 6px 13px; |
||||
} |
||||
|
||||
table tr:nth-child(2n) { |
||||
background-color: #F8F8F8; |
||||
} |
||||
|
||||
td p { |
||||
margin: 0 0 15px 0; |
||||
} |
||||
|
||||
div.table-contents td p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist * |
||||
{ |
||||
border: none !important; |
||||
background: none !important; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important p,div.note p,div.tip p,div.warning p { |
||||
color: #6F6F6F; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
div.important code,div.note code,div.tip code,div.warning code { |
||||
background-color: #F2F2F2 !important; |
||||
border: 1px solid #CCCCCC !important; |
||||
border-radius: 4px !important; |
||||
padding: 1px 3px 0 !important; |
||||
text-shadow: none !important; |
||||
white-space: nowrap !important; |
||||
} |
||||
|
||||
.note th,.tip th,.warning th { |
||||
display: none; |
||||
} |
||||
|
||||
.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td |
||||
{ |
||||
border-right: 1px solid #CCCCCC !important; |
||||
padding-top: 10px; |
||||
} |
||||
|
||||
div.calloutlist p,div.calloutlist td { |
||||
padding: 0; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.calloutlist>table>tbody>tr>td:first-child { |
||||
padding-left: 10px; |
||||
width: 30px !important; |
||||
} |
||||
|
||||
div.important,div.note,div.tip,div.warning { |
||||
margin-left: 0px !important; |
||||
margin-right: 20px !important; |
||||
margin-top: 20px; |
||||
margin-bottom: 20px; |
||||
padding-top: 10px; |
||||
padding-bottom: 10px; |
||||
} |
||||
|
||||
div.toc { |
||||
line-height: 1.2; |
||||
} |
||||
|
||||
dl,dt { |
||||
margin-top: 1px; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
div.toc>dl>dt { |
||||
font-size: 32px; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dt { |
||||
font-size: 24px; |
||||
font-weight: bold; |
||||
margin: 20px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dd>dl>dt { |
||||
font-weight: bold; |
||||
font-size: 20px; |
||||
margin: 10px 0 0 0; |
||||
} |
||||
|
||||
tbody.footnotes * { |
||||
border: none !important; |
||||
} |
||||
|
||||
div.footnote p { |
||||
margin: 0; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.footnote p sup { |
||||
margin-right: 6px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
div.navheader { |
||||
border-bottom: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
div.navfooter { |
||||
border-top: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
.title { |
||||
margin-left: -1em; |
||||
padding-left: 1em; |
||||
} |
||||
|
||||
.title>a { |
||||
position: absolute; |
||||
visibility: hidden; |
||||
display: block; |
||||
font-size: 0.85em; |
||||
margin-top: 0.05em; |
||||
margin-left: -1em; |
||||
vertical-align: text-top; |
||||
color: black; |
||||
} |
||||
|
||||
.title>a:before { |
||||
content: "\00A7"; |
||||
} |
||||
|
||||
.title:hover>a,.title>a:hover,.title:hover>a:hover { |
||||
visibility: visible; |
||||
} |
||||
|
||||
.title:focus>a,.title>a:focus,.title:focus>a:focus { |
||||
outline: 0; |
||||
} |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 329 B |
Before Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 350 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 931 B |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 178 KiB |
@ -1,19 +0,0 @@
@@ -1,19 +0,0 @@
|
||||
<html><head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
<title>Spring Cloud Gateway</title><link rel="stylesheet" type="text/css" href="css/manual-singlepage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d0e3"></a>Spring Cloud Gateway</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#d0e9"></a></span></dt><dt><span class="chapter"><a href="#gateway-starter">1. How to Include Spring Cloud Gateway</a></span></dt><dt><span class="chapter"><a href="#_building_a_gateway_using_spring_mvc">2. Building a Gateway Using Spring MVC</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="d0e9" href="#d0e9"></a></h1></div></div></div><p><span class="strong"><strong>1.0.4.BUILD-SNAPSHOT</strong></span></p><p>This project provides a library for building an API Gateway on top of Spring MVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.</p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="gateway-starter" href="#gateway-starter"></a>1. How to Include Spring Cloud Gateway</h1></div></div></div><p>To include Spring Cloud Gateway in your project add a dependency with group <code class="literal">org.springframework.cloud</code> and artifact id <code class="literal">spring-cloud-gateway-mvc</code>. See the <a class="link" href="https://projects.spring.io/spring-cloud/" target="_top">Spring Cloud Project page</a> for details on setting up your build system with the current Spring Cloud Release Train.</p></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="_building_a_gateway_using_spring_mvc" href="#_building_a_gateway_using_spring_mvc"></a>2. Building a Gateway Using Spring MVC</h1></div></div></div><p>Spring Cloud Gateway provides a utility object called <code class="literal">ProxyExchange</code> which you can use inside a regular Spring MVC handler as a method parameter. It supports basic downstream HTTP exchanges via methods that mirror the HTTP verbs, or forwarding to a local handler via the <code class="literal">forward()</code> method.</p><p>Example (proxying a request to "/test" downstream to a remote server):</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@RestController</span></em> |
||||
<em><span class="hl-annotation" style="color: gray">@SpringBootApplication</span></em> |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">class</span> GatewaySampleApplication { |
||||
|
||||
<em><span class="hl-annotation" style="color: gray">@Value("${remote.home}")</span></em> |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">private</span> URI home; |
||||
|
||||
<em><span class="hl-annotation" style="color: gray">@GetMapping("/test")</span></em> |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> ResponseEntity<?> proxy(ProxyExchange<Object> proxy) <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">throws</span> Exception { |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> proxy.uri(home.toString() + <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"/image/png"</span>).get(); |
||||
} |
||||
|
||||
}</pre><p>There are convenience methods on the <code class="literal">ProxyExchange</code> to enable the handler method to discover and enhance the URI path of the incoming request. For example you might want to extract the trailing elements of a path to pass them downstream:</p><pre class="programlisting"><em><span class="hl-annotation" style="color: gray">@GetMapping("/proxy/path/**")</span></em> |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">public</span> ResponseEntity<?> proxyPath(ProxyExchange<?> proxy) <span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">throws</span> Exception { |
||||
String path = proxy.path(<span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"/proxy/path/"</span>); |
||||
<span xmlns:d="http://docbook.org/ns/docbook" class="hl-keyword">return</span> proxy.uri(home.toString() + <span xmlns:d="http://docbook.org/ns/docbook" class="hl-string">"/foos/"</span> + path).get(); |
||||
}</pre><p>All the features of Spring MVC are available to Gateway handler methods. So you can inject request headers and query parameters, for instance, and you can constrain the incoming requests with declarations in the mapping annotation. See the documentation for <code class="literal">@RequestMapping</code> in Spring MVC for more details of those features.</p><p>Headers can be added to the downstream response using the <code class="literal">header()</code> methods on <code class="literal">ProxyExchange</code>.</p><p>You can also manipulate response headers (and anything else you like in the response) by adding a mapper to the <code class="literal">get()</code> etc. method. The mapper is a <code class="literal">Function</code> that takes the incoming <code class="literal">ResponseEntity</code> and converts it to an outgoing one.</p><p>First class support is provided for "sensitive" headers ("cookie" and "authorization" by default) which are not passed downstream, and for "proxy" headers (<code class="literal">x-forwarded-*</code>).</p></div></div></body></html> |
@ -1,117 +0,0 @@
@@ -1,117 +0,0 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<meta name="generator" content="Asciidoctor 1.5.5"> |
||||
<title>spring-cloud-gateway</title> |
||||
<link rel="stylesheet" href="css/manual-singlepage.css"> |
||||
<style> |
||||
.hidden { |
||||
display: none; |
||||
} |
||||
|
||||
.switch { |
||||
border-width: 1px 1px 0 1px; |
||||
border-style: solid; |
||||
border-color: #7a2518; |
||||
display: inline-block; |
||||
} |
||||
|
||||
.switch--item { |
||||
padding: 10px; |
||||
background-color: #ffffff; |
||||
color: #7a2518; |
||||
display: inline-block; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.switch--item.selected { |
||||
background-color: #7a2519; |
||||
color: #ffffff; |
||||
} |
||||
</style> |
||||
<script src="http://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js"></script> |
||||
<script type="text/javascript"> |
||||
function addBlockSwitches() { |
||||
$('.primary').each(function() { |
||||
primary = $(this); |
||||
createSwitchItem(primary, createBlockSwitch(primary)).item.addClass("selected"); |
||||
primary.children('.title').remove(); |
||||
}); |
||||
$('.secondary').each(function(idx, node) { |
||||
secondary = $(node); |
||||
primary = findPrimary(secondary); |
||||
switchItem = createSwitchItem(secondary, primary.children('.switch')); |
||||
switchItem.content.addClass('hidden'); |
||||
findPrimary(secondary).append(switchItem.content); |
||||
secondary.remove(); |
||||
}); |
||||
} |
||||
|
||||
function createBlockSwitch(primary) { |
||||
blockSwitch = $('<div class="switch"></div>'); |
||||
primary.prepend(blockSwitch); |
||||
return blockSwitch; |
||||
} |
||||
|
||||
function findPrimary(secondary) { |
||||
candidate = secondary.prev(); |
||||
while (!candidate.is('.primary')) { |
||||
candidate = candidate.prev(); |
||||
} |
||||
return candidate; |
||||
} |
||||
|
||||
function createSwitchItem(block, blockSwitch) { |
||||
blockName = block.children('.title').text(); |
||||
content = block.children('.content').first().append(block.next('.colist')); |
||||
item = $('<div class="switch--item">' + blockName + '</div>'); |
||||
item.on('click', '', content, function(e) { |
||||
$(this).addClass('selected'); |
||||
$(this).siblings().removeClass('selected'); |
||||
e.data.siblings('.content').addClass('hidden'); |
||||
e.data.removeClass('hidden'); |
||||
}); |
||||
blockSwitch.append(item); |
||||
return {'item': item, 'content': content}; |
||||
} |
||||
|
||||
$(addBlockSwitches); |
||||
</script> |
||||
</head> |
||||
|
||||
<body class="article"> |
||||
<div id="header"> |
||||
<h1>spring-cloud-gateway</h1> |
||||
</div> |
||||
<div id="content"> |
||||
<div id="preamble"> |
||||
<div class="sectionbody"> |
||||
<div class="paragraph"> |
||||
<p>1.0.4.BUILD-SNAPSHOT</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="sect1"> |
||||
<h2 id="_pick_the_documentation_option">Pick The Documentation Option</h2> |
||||
<div class="sectionbody"> |
||||
<div class="ulist"> |
||||
<ul> |
||||
<li> |
||||
<p><a href="single/spring-cloud-gateway.html">Single HTML</a></p> |
||||
</li> |
||||
<li> |
||||
<p><a href="multi/multi_spring-cloud-gateway.html">Multi HTML</a></p> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css"> |
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js"></script> |
||||
<script>prettyPrint()</script> |
||||
</body> |
||||
</html> |
@ -1,46 +0,0 @@
@@ -1,46 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<?asciidoc-toc?> |
||||
<?asciidoc-numbered?> |
||||
<book xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en"> |
||||
<info> |
||||
<title>Spring Cloud Gateway</title> |
||||
<date>2019-09-16</date> |
||||
</info> |
||||
<preface> |
||||
<title></title> |
||||
<simpara><emphasis role="strong">1.0.4.BUILD-SNAPSHOT</emphasis></simpara> |
||||
<simpara>This project provides a library for building an API Gateway on top of Spring MVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.</simpara> |
||||
</preface> |
||||
<chapter xml:id="gateway-starter"> |
||||
<title>How to Include Spring Cloud Gateway</title> |
||||
<simpara>To include Spring Cloud Gateway in your project add a dependency with group <literal>org.springframework.cloud</literal> and artifact id <literal>spring-cloud-gateway-mvc</literal>. See the <link xl:href="https://projects.spring.io/spring-cloud/">Spring Cloud Project page</link> for details on setting up your build system with the current Spring Cloud Release Train.</simpara> |
||||
</chapter> |
||||
<chapter xml:id="_building_a_gateway_using_spring_mvc"> |
||||
<title>Building a Gateway Using Spring MVC</title> |
||||
<simpara>Spring Cloud Gateway provides a utility object called <literal>ProxyExchange</literal> which you can use inside a regular Spring MVC handler as a method parameter. It supports basic downstream HTTP exchanges via methods that mirror the HTTP verbs, or forwarding to a local handler via the <literal>forward()</literal> method.</simpara> |
||||
<simpara>Example (proxying a request to "/test" downstream to a remote server):</simpara> |
||||
<programlisting language="java" linenumbering="unnumbered">@RestController |
||||
@SpringBootApplication |
||||
public class GatewaySampleApplication { |
||||
|
||||
@Value("${remote.home}") |
||||
private URI home; |
||||
|
||||
@GetMapping("/test") |
||||
public ResponseEntity<?> proxy(ProxyExchange<Object> proxy) throws Exception { |
||||
return proxy.uri(home.toString() + "/image/png").get(); |
||||
} |
||||
|
||||
}</programlisting> |
||||
<simpara>There are convenience methods on the <literal>ProxyExchange</literal> to enable the handler method to discover and enhance the URI path of the incoming request. For example you might want to extract the trailing elements of a path to pass them downstream:</simpara> |
||||
<programlisting language="java" linenumbering="unnumbered">@GetMapping("/proxy/path/**") |
||||
public ResponseEntity<?> proxyPath(ProxyExchange<?> proxy) throws Exception { |
||||
String path = proxy.path("/proxy/path/"); |
||||
return proxy.uri(home.toString() + "/foos/" + path).get(); |
||||
}</programlisting> |
||||
<simpara>All the features of Spring MVC are available to Gateway handler methods. So you can inject request headers and query parameters, for instance, and you can constrain the incoming requests with declarations in the mapping annotation. See the documentation for <literal>@RequestMapping</literal> in Spring MVC for more details of those features.</simpara> |
||||
<simpara>Headers can be added to the downstream response using the <literal>header()</literal> methods on <literal>ProxyExchange</literal>.</simpara> |
||||
<simpara>You can also manipulate response headers (and anything else you like in the response) by adding a mapper to the <literal>get()</literal> etc. method. The mapper is a <literal>Function</literal> that takes the incoming <literal>ResponseEntity</literal> and converts it to an outgoing one.</simpara> |
||||
<simpara>First class support is provided for "sensitive" headers ("cookie" and "authorization" by default) which are not passed downstream, and for "proxy" headers (<literal>x-forwarded-*</literal>).</simpara> |
||||
</chapter> |
||||
</book> |
@ -1,35 +0,0 @@
@@ -1,35 +0,0 @@
|
||||
/* |
||||
code highlight CSS resemblign the Eclipse IDE default color schema |
||||
@author Costin Leau |
||||
*/ |
||||
|
||||
.hl-keyword { |
||||
color: #7F0055; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.hl-comment { |
||||
color: #3F5F5F; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-multiline-comment { |
||||
color: #3F5FBF; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-tag { |
||||
color: #3F7F7F; |
||||
} |
||||
|
||||
.hl-attribute { |
||||
color: #7F007F; |
||||
} |
||||
|
||||
.hl-value { |
||||
color: #2A00FF; |
||||
} |
||||
|
||||
.hl-string { |
||||
color: #2A00FF; |
||||
} |
@ -1,9 +0,0 @@
@@ -1,9 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body.firstpage { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: none; |
||||
} |
@ -1,6 +0,0 @@
@@ -1,6 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
@ -1,344 +0,0 @@
@@ -1,344 +0,0 @@
|
||||
@IMPORT url("highlight.css"); |
||||
|
||||
html { |
||||
padding: 0pt; |
||||
margin: 0pt; |
||||
} |
||||
|
||||
body { |
||||
color: #333333; |
||||
margin: 15px 30px; |
||||
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif; |
||||
line-height: 1.6; |
||||
-webkit-font-smoothing: antialiased; |
||||
} |
||||
|
||||
code { |
||||
font-size: 16px; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
:not(a)>code { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
:not(pre)>code { |
||||
background-color: #F2F2F2; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 4px; |
||||
padding: 1px 3px 0; |
||||
text-shadow: none; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
body>*:first-child { |
||||
margin-top: 0 !important; |
||||
} |
||||
|
||||
div { |
||||
margin: 0pt; |
||||
} |
||||
|
||||
hr { |
||||
border: 1px solid #CCCCCC; |
||||
background: #CCCCCC; |
||||
} |
||||
|
||||
h1,h2,h3,h4,h5,h6 { |
||||
color: #000000; |
||||
cursor: text; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px; |
||||
padding: 0; |
||||
} |
||||
|
||||
h1,h2,h3 { |
||||
margin: 40px 0 10px; |
||||
} |
||||
|
||||
h1 { |
||||
margin: 70px 0 30px; |
||||
padding-top: 20px; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: 1px dotted #CCCCCC; |
||||
} |
||||
|
||||
h1,h1 code { |
||||
font-size: 32px; |
||||
} |
||||
|
||||
h2,h2 code { |
||||
font-size: 24px; |
||||
} |
||||
|
||||
h3,h3 code { |
||||
font-size: 20px; |
||||
} |
||||
|
||||
h4,h1 code,h5,h5 code,h6,h6 code { |
||||
font-size: 18px; |
||||
} |
||||
|
||||
div.book,div.chapter,div.appendix,div.part,div.preface { |
||||
min-width: 300px; |
||||
max-width: 1200px; |
||||
margin: 0 auto; |
||||
} |
||||
|
||||
p.releaseinfo { |
||||
font-weight: bold; |
||||
margin-bottom: 40px; |
||||
margin-top: 40px; |
||||
} |
||||
|
||||
div.authorgroup { |
||||
line-height: 1; |
||||
} |
||||
|
||||
p.copyright { |
||||
line-height: 1; |
||||
margin-bottom: -5px; |
||||
} |
||||
|
||||
.legalnotice p { |
||||
font-style: italic; |
||||
font-size: 14px; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.titlepage+p,div.titlepage+p { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
pre { |
||||
line-height: 1.0; |
||||
color: black; |
||||
} |
||||
|
||||
a { |
||||
color: #4183C4; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
p { |
||||
margin: 15px 0; |
||||
text-align: left; |
||||
} |
||||
|
||||
ul,ol { |
||||
padding-left: 30px; |
||||
} |
||||
|
||||
li p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.table { |
||||
margin: 1em; |
||||
padding: 0.5em; |
||||
text-align: center; |
||||
} |
||||
|
||||
div.table table,div.informaltable table { |
||||
display: table; |
||||
width: 100%; |
||||
} |
||||
|
||||
div.table td { |
||||
padding-left: 7px; |
||||
padding-right: 7px; |
||||
} |
||||
|
||||
.sidebar { |
||||
line-height: 1.4; |
||||
padding: 0 20px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
} |
||||
|
||||
.sidebar p.title { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
pre.programlisting,pre.screen { |
||||
font-size: 15px; |
||||
padding: 6px 10px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
clear: both; |
||||
overflow: auto; |
||||
line-height: 1.4; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
table { |
||||
border-collapse: collapse; |
||||
border-spacing: 0; |
||||
border: 1px solid #DDDDDD !important; |
||||
border-radius: 4px !important; |
||||
border-collapse: separate !important; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
table thead { |
||||
background: #F5F5F5; |
||||
} |
||||
|
||||
table tr { |
||||
border: none; |
||||
border-bottom: none; |
||||
} |
||||
|
||||
table th { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
table th,table td { |
||||
border: none !important; |
||||
padding: 6px 13px; |
||||
} |
||||
|
||||
table tr:nth-child(2n) { |
||||
background-color: #F8F8F8; |
||||
} |
||||
|
||||
td p { |
||||
margin: 0 0 15px 0; |
||||
} |
||||
|
||||
div.table-contents td p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist * |
||||
{ |
||||
border: none !important; |
||||
background: none !important; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important p,div.note p,div.tip p,div.warning p { |
||||
color: #6F6F6F; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
div.important code,div.note code,div.tip code,div.warning code { |
||||
background-color: #F2F2F2 !important; |
||||
border: 1px solid #CCCCCC !important; |
||||
border-radius: 4px !important; |
||||
padding: 1px 3px 0 !important; |
||||
text-shadow: none !important; |
||||
white-space: nowrap !important; |
||||
} |
||||
|
||||
.note th,.tip th,.warning th { |
||||
display: none; |
||||
} |
||||
|
||||
.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td |
||||
{ |
||||
border-right: 1px solid #CCCCCC !important; |
||||
padding-top: 10px; |
||||
} |
||||
|
||||
div.calloutlist p,div.calloutlist td { |
||||
padding: 0; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.calloutlist>table>tbody>tr>td:first-child { |
||||
padding-left: 10px; |
||||
width: 30px !important; |
||||
} |
||||
|
||||
div.important,div.note,div.tip,div.warning { |
||||
margin-left: 0px !important; |
||||
margin-right: 20px !important; |
||||
margin-top: 20px; |
||||
margin-bottom: 20px; |
||||
padding-top: 10px; |
||||
padding-bottom: 10px; |
||||
} |
||||
|
||||
div.toc { |
||||
line-height: 1.2; |
||||
} |
||||
|
||||
dl,dt { |
||||
margin-top: 1px; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
div.toc>dl>dt { |
||||
font-size: 32px; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dt { |
||||
font-size: 24px; |
||||
font-weight: bold; |
||||
margin: 20px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dd>dl>dt { |
||||
font-weight: bold; |
||||
font-size: 20px; |
||||
margin: 10px 0 0 0; |
||||
} |
||||
|
||||
tbody.footnotes * { |
||||
border: none !important; |
||||
} |
||||
|
||||
div.footnote p { |
||||
margin: 0; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.footnote p sup { |
||||
margin-right: 6px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
div.navheader { |
||||
border-bottom: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
div.navfooter { |
||||
border-top: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
.title { |
||||
margin-left: -1em; |
||||
padding-left: 1em; |
||||
} |
||||
|
||||
.title>a { |
||||
position: absolute; |
||||
visibility: hidden; |
||||
display: block; |
||||
font-size: 0.85em; |
||||
margin-top: 0.05em; |
||||
margin-left: -1em; |
||||
vertical-align: text-top; |
||||
color: black; |
||||
} |
||||
|
||||
.title>a:before { |
||||
content: "\00A7"; |
||||
} |
||||
|
||||
.title:hover>a,.title>a:hover,.title:hover>a:hover { |
||||
visibility: visible; |
||||
} |
||||
|
||||
.title:focus>a,.title>a:focus,.title:focus>a:focus { |
||||
outline: 0; |
||||
} |
@ -1,330 +0,0 @@
@@ -1,330 +0,0 @@
|
||||
#!/bin/bash -x |
||||
|
||||
set -e |
||||
|
||||
# Set default props like MAVEN_PATH, ROOT_FOLDER etc. |
||||
function set_default_props() { |
||||
# The script should be executed from the root folder |
||||
ROOT_FOLDER=`pwd` |
||||
echo "Current folder is ${ROOT_FOLDER}" |
||||
|
||||
if [[ ! -e "${ROOT_FOLDER}/.git" ]]; then |
||||
echo "You're not in the root folder of the project!" |
||||
exit 1 |
||||
fi |
||||
|
||||
# Prop that will let commit the changes |
||||
COMMIT_CHANGES="no" |
||||
MAVEN_PATH=${MAVEN_PATH:-} |
||||
echo "Path to Maven is [${MAVEN_PATH}]" |
||||
REPO_NAME=${PWD##*/} |
||||
echo "Repo name is [${REPO_NAME}]" |
||||
SPRING_CLOUD_STATIC_REPO=${SPRING_CLOUD_STATIC_REPO:-git@github.com:spring-cloud/spring-cloud-static.git} |
||||
echo "Spring Cloud Static repo is [${SPRING_CLOUD_STATIC_REPO}" |
||||
} |
||||
|
||||
# Check if gh-pages exists and docs have been built |
||||
function check_if_anything_to_sync() { |
||||
git remote set-url --push origin `git config remote.origin.url | sed -e 's/^git:/https:/'` |
||||
|
||||
if ! (git remote set-branches --add origin gh-pages && git fetch -q); then |
||||
echo "No gh-pages, so not syncing" |
||||
exit 0 |
||||
fi |
||||
|
||||
if ! [ -d docs/target/generated-docs ] && ! [ "${BUILD}" == "yes" ]; then |
||||
echo "No gh-pages sources in docs/target/generated-docs, so not syncing" |
||||
exit 0 |
||||
fi |
||||
} |
||||
|
||||
function retrieve_current_branch() { |
||||
# Code getting the name of the current branch. For master we want to publish as we did until now |
||||
# https://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch |
||||
# If there is a branch already passed will reuse it - otherwise will try to find it |
||||
CURRENT_BRANCH=${BRANCH} |
||||
if [[ -z "${CURRENT_BRANCH}" ]] ; then |
||||
CURRENT_BRANCH=$(git symbolic-ref -q HEAD) |
||||
CURRENT_BRANCH=${CURRENT_BRANCH##refs/heads/} |
||||
CURRENT_BRANCH=${CURRENT_BRANCH:-HEAD} |
||||
fi |
||||
echo "Current branch is [${CURRENT_BRANCH}]" |
||||
git checkout ${CURRENT_BRANCH} || echo "Failed to check the branch... continuing with the script" |
||||
} |
||||
|
||||
# Switches to the provided value of the release version. We always prefix it with `v` |
||||
function switch_to_tag() { |
||||
git checkout v${VERSION} |
||||
} |
||||
|
||||
# Build the docs if switch is on |
||||
function build_docs_if_applicable() { |
||||
if [[ "${BUILD}" == "yes" ]] ; then |
||||
./mvnw clean install -P docs -pl docs -DskipTests |
||||
fi |
||||
} |
||||
|
||||
# Get the name of the `docs.main` property |
||||
# Get whitelisted branches - assumes that a `docs` module is available under `docs` profile |
||||
function retrieve_doc_properties() { |
||||
MAIN_ADOC_VALUE=$("${MAVEN_PATH}"mvn -q \ |
||||
-Dexec.executable="echo" \ |
||||
-Dexec.args='${docs.main}' \ |
||||
--non-recursive \ |
||||
org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) |
||||
echo "Extracted 'main.adoc' from Maven build [${MAIN_ADOC_VALUE}]" |
||||
|
||||
|
||||
WHITELIST_PROPERTY=${WHITELIST_PROPERTY:-"docs.whitelisted.branches"} |
||||
WHITELISTED_BRANCHES_VALUE=$("${MAVEN_PATH}"mvn -q \ |
||||
-Dexec.executable="echo" \ |
||||
-Dexec.args="\${${WHITELIST_PROPERTY}}" \ |
||||
org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \ |
||||
-P docs \ |
||||
-pl docs) |
||||
echo "Extracted '${WHITELIST_PROPERTY}' from Maven build [${WHITELISTED_BRANCHES_VALUE}]" |
||||
} |
||||
|
||||
# Stash any outstanding changes |
||||
function stash_changes() { |
||||
git diff-index --quiet HEAD && dirty=$? || (echo "Failed to check if the current repo is dirty. Assuming that it is." && dirty="1") |
||||
if [ "$dirty" != "0" ]; then git stash; fi |
||||
} |
||||
|
||||
# Switch to gh-pages branch to sync it with current branch |
||||
function add_docs_from_target() { |
||||
local DESTINATION_REPO_FOLDER |
||||
if [[ -z "${DESTINATION}" && -z "${CLONE}" ]] ; then |
||||
DESTINATION_REPO_FOLDER=${ROOT_FOLDER} |
||||
elif [[ "${CLONE}" == "yes" ]]; then |
||||
mkdir -p ${ROOT_FOLDER}/target |
||||
local clonedStatic=${ROOT_FOLDER}/target/spring-cloud-static |
||||
if [[ ! -e "${clonedStatic}/.git" ]]; then |
||||
echo "Cloning Spring Cloud Static to target" |
||||
git clone ${SPRING_CLOUD_STATIC_REPO} ${clonedStatic} && git checkout gh-pages |
||||
else |
||||
echo "Spring Cloud Static already cloned - will pull changes" |
||||
cd ${clonedStatic} && git checkout gh-pages && git pull origin gh-pages |
||||
fi |
||||
DESTINATION_REPO_FOLDER=${clonedStatic}/${REPO_NAME} |
||||
mkdir -p ${DESTINATION_REPO_FOLDER} |
||||
else |
||||
if [[ ! -e "${DESTINATION}/.git" ]]; then |
||||
echo "[${DESTINATION}] is not a git repository" |
||||
exit 1 |
||||
fi |
||||
DESTINATION_REPO_FOLDER=${DESTINATION}/${REPO_NAME} |
||||
mkdir -p ${DESTINATION_REPO_FOLDER} |
||||
echo "Destination was provided [${DESTINATION}]" |
||||
fi |
||||
cd ${DESTINATION_REPO_FOLDER} |
||||
git checkout gh-pages |
||||
git pull origin gh-pages |
||||
|
||||
# Add git branches |
||||
################################################################### |
||||
if [[ -z "${VERSION}" ]] ; then |
||||
copy_docs_for_current_version |
||||
else |
||||
copy_docs_for_provided_version |
||||
fi |
||||
commit_changes_if_applicable |
||||
} |
||||
|
||||
|
||||
# Copies the docs by using the retrieved properties from Maven build |
||||
function copy_docs_for_current_version() { |
||||
if [[ "${CURRENT_BRANCH}" == "master" ]] ; then |
||||
echo -e "Current branch is master - will copy the current docs only to the root folder" |
||||
for f in docs/target/generated-docs/*; do |
||||
file=${f#docs/target/generated-docs/*} |
||||
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then |
||||
# Not ignored... |
||||
cp -rf $f ${ROOT_FOLDER}/ |
||||
git add -A ${ROOT_FOLDER}/$file |
||||
fi |
||||
done |
||||
COMMIT_CHANGES="yes" |
||||
else |
||||
echo -e "Current branch is [${CURRENT_BRANCH}]" |
||||
# https://stackoverflow.com/questions/29300806/a-bash-script-to-check-if-a-string-is-present-in-a-comma-separated-list-of-strin |
||||
if [[ ",${WHITELISTED_BRANCHES_VALUE}," = *",${CURRENT_BRANCH},"* ]] ; then |
||||
mkdir -p ${ROOT_FOLDER}/${CURRENT_BRANCH} |
||||
echo -e "Branch [${CURRENT_BRANCH}] is whitelisted! Will copy the current docs to the [${CURRENT_BRANCH}] folder" |
||||
for f in docs/target/generated-docs/*; do |
||||
file=${f#docs/target/generated-docs/*} |
||||
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then |
||||
# Not ignored... |
||||
# We want users to access 1.0.0.RELEASE/ instead of 1.0.0.RELEASE/spring-cloud.sleuth.html |
||||
if [[ "${file}" == "${MAIN_ADOC_VALUE}.html" ]] ; then |
||||
# We don't want to copy the spring-cloud-sleuth.html |
||||
# we want it to be converted to index.html |
||||
cp -rf $f ${ROOT_FOLDER}/${CURRENT_BRANCH}/index.html |
||||
git add -A ${ROOT_FOLDER}/${CURRENT_BRANCH}/index.html |
||||
else |
||||
cp -rf $f ${ROOT_FOLDER}/${CURRENT_BRANCH} |
||||
git add -A ${ROOT_FOLDER}/${CURRENT_BRANCH}/$file |
||||
fi |
||||
fi |
||||
done |
||||
COMMIT_CHANGES="yes" |
||||
else |
||||
echo -e "Branch [${CURRENT_BRANCH}] is not on the white list! Check out the Maven [${WHITELIST_PROPERTY}] property in |
||||
[docs] module available under [docs] profile. Won't commit any changes to gh-pages for this branch." |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
# Copies the docs by using the explicitly provided version |
||||
function copy_docs_for_provided_version() { |
||||
local FOLDER=${DESTINATION_REPO_FOLDER}/${VERSION} |
||||
mkdir -p ${FOLDER} |
||||
echo -e "Current tag is [v${VERSION}] Will copy the current docs to the [${FOLDER}] folder" |
||||
for f in ${ROOT_FOLDER}/docs/target/generated-docs/*; do |
||||
file=${f#${ROOT_FOLDER}/docs/target/generated-docs/*} |
||||
copy_docs_for_branch ${file} ${FOLDER} |
||||
done |
||||
COMMIT_CHANGES="yes" |
||||
CURRENT_BRANCH="v${VERSION}" |
||||
} |
||||
|
||||
# Copies the docs from target to the provided destination |
||||
# Params: |
||||
# $1 - file from target |
||||
# $2 - destination to which copy the files |
||||
function copy_docs_for_branch() { |
||||
local file=$1 |
||||
local destination=$2 |
||||
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^${file}$; then |
||||
# Not ignored... |
||||
# We want users to access 1.0.0.RELEASE/ instead of 1.0.0.RELEASE/spring-cloud.sleuth.html |
||||
if [[ ("${file}" == "${MAIN_ADOC_VALUE}.html") || ("${file}" == "${REPO_NAME}.html") ]] ; then |
||||
# We don't want to copy the spring-cloud-sleuth.html |
||||
# we want it to be converted to index.html |
||||
cp -rf $f ${destination}/index.html |
||||
git add -A ${destination}/index.html |
||||
else |
||||
cp -rf $f ${destination} |
||||
git add -A ${destination}/$file |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
function commit_changes_if_applicable() { |
||||
if [[ "${COMMIT_CHANGES}" == "yes" ]] ; then |
||||
COMMIT_SUCCESSFUL="no" |
||||
git commit -a -m "Sync docs from ${CURRENT_BRANCH} to gh-pages" && COMMIT_SUCCESSFUL="yes" || echo "Failed to commit changes" |
||||
|
||||
# Uncomment the following push if you want to auto push to |
||||
# the gh-pages branch whenever you commit to master locally. |
||||
# This is a little extreme. Use with care! |
||||
################################################################### |
||||
if [[ "${COMMIT_SUCCESSFUL}" == "yes" ]] ; then |
||||
git push origin gh-pages |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
# Switch back to the previous branch and exit block |
||||
function checkout_previous_branch() { |
||||
# If -version was provided we need to come back to root project |
||||
cd ${ROOT_FOLDER} |
||||
git checkout ${CURRENT_BRANCH} || echo "Failed to check the branch... continuing with the script" |
||||
if [ "$dirty" != "0" ]; then git stash pop; fi |
||||
exit 0 |
||||
} |
||||
|
||||
# Assert if properties have been properly passed |
||||
function assert_properties() { |
||||
echo "VERSION [${VERSION}], DESTINATION [${DESTINATION}], CLONE [${CLONE}]" |
||||
if [[ "${VERSION}" != "" && (-z "${DESTINATION}" && -z "${CLONE}") ]] ; then echo "Version was set but destination / clone was not!"; exit 1;fi |
||||
if [[ ("${DESTINATION}" != "" && "${CLONE}" != "") && -z "${VERSION}" ]] ; then echo "Destination / clone was set but version was not!"; exit 1;fi |
||||
if [[ "${DESTINATION}" != "" && "${CLONE}" == "yes" ]] ; then echo "Destination and clone was set. Pick one!"; exit 1;fi |
||||
} |
||||
|
||||
# Prints the usage |
||||
function print_usage() { |
||||
cat <<EOF |
||||
The idea of this script is to update gh-pages branch with the generated docs. Without any options |
||||
the script will work in the following manner: |
||||
|
||||
- if there's no gh-pages / target for docs module then the script ends |
||||
- for master branch the generated docs are copied to the root of gh-pages branch |
||||
- for any other branch (if that branch is whitelisted) a subfolder with branch name is created |
||||
and docs are copied there |
||||
- if the version switch is passed (-v) then a tag with (v) prefix will be retrieved and a folder |
||||
with that version number will be created in the gh-pages branch. WARNING! No whitelist verification will take place |
||||
- if the destination switch is passed (-d) then the script will check if the provided dir is a git repo and then will |
||||
switch to gh-pages of that repo and copy the generated docs to `docs/<project-name>/<version>` |
||||
- if the destination switch is passed (-d) then the script will check if the provided dir is a git repo and then will |
||||
switch to gh-pages of that repo and copy the generated docs to `docs/<project-name>/<version>` |
||||
|
||||
USAGE: |
||||
|
||||
You can use the following options: |
||||
|
||||
-v|--version - the script will apply the whole procedure for a particular library version |
||||
-d|--destination - the root of destination folder where the docs should be copied. You have to use the full path. |
||||
E.g. point to spring-cloud-static folder. Can't be used with (-c) |
||||
-b|--build - will run the standard build process after checking out the branch |
||||
-c|--clone - will automatically clone the spring-cloud-static repo instead of providing the destination. |
||||
Obviously can't be used with (-d) |
||||
|
||||
EOF |
||||
} |
||||
|
||||
|
||||
# ========================================== |
||||
# ____ ____ _____ _____ _____ _______ |
||||
# / ____|/ ____| __ \|_ _| __ \__ __| |
||||
# | (___ | | | |__) | | | | |__) | | | |
||||
# \___ \| | | _ / | | | ___/ | | |
||||
# ____) | |____| | \ \ _| |_| | | | |
||||
# |_____/ \_____|_| \_\_____|_| |_| |
||||
# |
||||
# ========================================== |
||||
|
||||
while [[ $# > 0 ]] |
||||
do |
||||
key="$1" |
||||
case ${key} in |
||||
-v|--version) |
||||
VERSION="$2" |
||||
shift # past argument |
||||
;; |
||||
-d|--destination) |
||||
DESTINATION="$2" |
||||
shift # past argument |
||||
;; |
||||
-b|--build) |
||||
BUILD="yes" |
||||
;; |
||||
-c|--clone) |
||||
CLONE="yes" |
||||
;; |
||||
-h|--help) |
||||
print_usage |
||||
exit 0 |
||||
;; |
||||
*) |
||||
echo "Invalid option: [$1]" |
||||
print_usage |
||||
exit 1 |
||||
;; |
||||
esac |
||||
shift # past argument or value |
||||
done |
||||
|
||||
assert_properties |
||||
set_default_props |
||||
check_if_anything_to_sync |
||||
if [[ -z "${VERSION}" ]] ; then |
||||
retrieve_current_branch |
||||
else |
||||
switch_to_tag |
||||
fi |
||||
build_docs_if_applicable |
||||
retrieve_doc_properties |
||||
stash_changes |
||||
add_docs_from_target |
||||
checkout_previous_branch |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 931 B |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 178 KiB |
@ -1,117 +0,0 @@
@@ -1,117 +0,0 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<meta name="generator" content="Asciidoctor 1.5.5"> |
||||
<title>spring-cloud-gateway</title> |
||||
<link rel="stylesheet" href="css/manual-singlepage.css"> |
||||
<style> |
||||
.hidden { |
||||
display: none; |
||||
} |
||||
|
||||
.switch { |
||||
border-width: 1px 1px 0 1px; |
||||
border-style: solid; |
||||
border-color: #7a2518; |
||||
display: inline-block; |
||||
} |
||||
|
||||
.switch--item { |
||||
padding: 10px; |
||||
background-color: #ffffff; |
||||
color: #7a2518; |
||||
display: inline-block; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.switch--item.selected { |
||||
background-color: #7a2519; |
||||
color: #ffffff; |
||||
} |
||||
</style> |
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/zepto/1.2.0/zepto.min.js"></script> |
||||
<script type="text/javascript"> |
||||
function addBlockSwitches() { |
||||
$('.primary').each(function() { |
||||
primary = $(this); |
||||
createSwitchItem(primary, createBlockSwitch(primary)).item.addClass("selected"); |
||||
primary.children('.title').remove(); |
||||
}); |
||||
$('.secondary').each(function(idx, node) { |
||||
secondary = $(node); |
||||
primary = findPrimary(secondary); |
||||
switchItem = createSwitchItem(secondary, primary.children('.switch')); |
||||
switchItem.content.addClass('hidden'); |
||||
findPrimary(secondary).append(switchItem.content); |
||||
secondary.remove(); |
||||
}); |
||||
} |
||||
|
||||
function createBlockSwitch(primary) { |
||||
blockSwitch = $('<div class="switch"></div>'); |
||||
primary.prepend(blockSwitch); |
||||
return blockSwitch; |
||||
} |
||||
|
||||
function findPrimary(secondary) { |
||||
candidate = secondary.prev(); |
||||
while (!candidate.is('.primary')) { |
||||
candidate = candidate.prev(); |
||||
} |
||||
return candidate; |
||||
} |
||||
|
||||
function createSwitchItem(block, blockSwitch) { |
||||
blockName = block.children('.title').text(); |
||||
content = block.children('.content').first().append(block.next('.colist')); |
||||
item = $('<div class="switch--item">' + blockName + '</div>'); |
||||
item.on('click', '', content, function(e) { |
||||
$(this).addClass('selected'); |
||||
$(this).siblings().removeClass('selected'); |
||||
e.data.siblings('.content').addClass('hidden'); |
||||
e.data.removeClass('hidden'); |
||||
}); |
||||
blockSwitch.append(item); |
||||
return {'item': item, 'content': content}; |
||||
} |
||||
|
||||
$(addBlockSwitches); |
||||
</script> |
||||
</head> |
||||
|
||||
<body class="article"> |
||||
<div id="header"> |
||||
<h1>spring-cloud-gateway</h1> |
||||
</div> |
||||
<div id="content"> |
||||
<div id="preamble"> |
||||
<div class="sectionbody"> |
||||
<div class="paragraph"> |
||||
<p>2.0.0.BUILD-SNAPSHOT</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="sect1"> |
||||
<h2 id="_pick_the_documentation_option">Pick The Documentation Option</h2> |
||||
<div class="sectionbody"> |
||||
<div class="ulist"> |
||||
<ul> |
||||
<li> |
||||
<p><a href="single/spring-cloud-gateway.html">Single HTML</a></p> |
||||
</li> |
||||
<li> |
||||
<p><a href="multi/multi_spring-cloud-gateway.html">Multi HTML</a></p> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css"> |
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js"></script> |
||||
<script>prettyPrint()</script> |
||||
</body> |
||||
</html> |
@ -1,35 +0,0 @@
@@ -1,35 +0,0 @@
|
||||
/* |
||||
code highlight CSS resemblign the Eclipse IDE default color schema |
||||
@author Costin Leau |
||||
*/ |
||||
|
||||
.hl-keyword { |
||||
color: #7F0055; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.hl-comment { |
||||
color: #3F5F5F; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-multiline-comment { |
||||
color: #3F5FBF; |
||||
font-style: italic; |
||||
} |
||||
|
||||
.hl-tag { |
||||
color: #3F7F7F; |
||||
} |
||||
|
||||
.hl-attribute { |
||||
color: #7F007F; |
||||
} |
||||
|
||||
.hl-value { |
||||
color: #2A00FF; |
||||
} |
||||
|
||||
.hl-string { |
||||
color: #2A00FF; |
||||
} |
@ -1,9 +0,0 @@
@@ -1,9 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body.firstpage { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: none; |
||||
} |
@ -1,6 +0,0 @@
@@ -1,6 +0,0 @@
|
||||
@IMPORT url("manual.css"); |
||||
|
||||
body { |
||||
background: url("../images/background.png") no-repeat center top; |
||||
} |
||||
|
@ -1,344 +0,0 @@
@@ -1,344 +0,0 @@
|
||||
@IMPORT url("highlight.css"); |
||||
|
||||
html { |
||||
padding: 0pt; |
||||
margin: 0pt; |
||||
} |
||||
|
||||
body { |
||||
color: #333333; |
||||
margin: 15px 30px; |
||||
font-family: Helvetica, Arial, Freesans, Clean, Sans-serif; |
||||
line-height: 1.6; |
||||
-webkit-font-smoothing: antialiased; |
||||
} |
||||
|
||||
code { |
||||
font-size: 16px; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
:not(a)>code { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
:not(pre)>code { |
||||
background-color: #F2F2F2; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 4px; |
||||
padding: 1px 3px 0; |
||||
text-shadow: none; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
body>*:first-child { |
||||
margin-top: 0 !important; |
||||
} |
||||
|
||||
div { |
||||
margin: 0pt; |
||||
} |
||||
|
||||
hr { |
||||
border: 1px solid #CCCCCC; |
||||
background: #CCCCCC; |
||||
} |
||||
|
||||
h1,h2,h3,h4,h5,h6 { |
||||
color: #000000; |
||||
cursor: text; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px; |
||||
padding: 0; |
||||
} |
||||
|
||||
h1,h2,h3 { |
||||
margin: 40px 0 10px; |
||||
} |
||||
|
||||
h1 { |
||||
margin: 70px 0 30px; |
||||
padding-top: 20px; |
||||
} |
||||
|
||||
div.part h1 { |
||||
border-top: 1px dotted #CCCCCC; |
||||
} |
||||
|
||||
h1,h1 code { |
||||
font-size: 32px; |
||||
} |
||||
|
||||
h2,h2 code { |
||||
font-size: 24px; |
||||
} |
||||
|
||||
h3,h3 code { |
||||
font-size: 20px; |
||||
} |
||||
|
||||
h4,h1 code,h5,h5 code,h6,h6 code { |
||||
font-size: 18px; |
||||
} |
||||
|
||||
div.book,div.chapter,div.appendix,div.part,div.preface { |
||||
min-width: 300px; |
||||
max-width: 1200px; |
||||
margin: 0 auto; |
||||
} |
||||
|
||||
p.releaseinfo { |
||||
font-weight: bold; |
||||
margin-bottom: 40px; |
||||
margin-top: 40px; |
||||
} |
||||
|
||||
div.authorgroup { |
||||
line-height: 1; |
||||
} |
||||
|
||||
p.copyright { |
||||
line-height: 1; |
||||
margin-bottom: -5px; |
||||
} |
||||
|
||||
.legalnotice p { |
||||
font-style: italic; |
||||
font-size: 14px; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.titlepage+p,div.titlepage+p { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
pre { |
||||
line-height: 1.0; |
||||
color: black; |
||||
} |
||||
|
||||
a { |
||||
color: #4183C4; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
p { |
||||
margin: 15px 0; |
||||
text-align: left; |
||||
} |
||||
|
||||
ul,ol { |
||||
padding-left: 30px; |
||||
} |
||||
|
||||
li p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.table { |
||||
margin: 1em; |
||||
padding: 0.5em; |
||||
text-align: center; |
||||
} |
||||
|
||||
div.table table,div.informaltable table { |
||||
display: table; |
||||
width: 100%; |
||||
} |
||||
|
||||
div.table td { |
||||
padding-left: 7px; |
||||
padding-right: 7px; |
||||
} |
||||
|
||||
.sidebar { |
||||
line-height: 1.4; |
||||
padding: 0 20px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
} |
||||
|
||||
.sidebar p.title { |
||||
color: #6D180B; |
||||
} |
||||
|
||||
pre.programlisting,pre.screen { |
||||
font-size: 15px; |
||||
padding: 6px 10px; |
||||
background-color: #F8F8F8; |
||||
border: 1px solid #CCCCCC; |
||||
border-radius: 3px 3px 3px 3px; |
||||
clear: both; |
||||
overflow: auto; |
||||
line-height: 1.4; |
||||
font-family: Consolas, "Liberation Mono", Courier, monospace; |
||||
} |
||||
|
||||
table { |
||||
border-collapse: collapse; |
||||
border-spacing: 0; |
||||
border: 1px solid #DDDDDD !important; |
||||
border-radius: 4px !important; |
||||
border-collapse: separate !important; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
table thead { |
||||
background: #F5F5F5; |
||||
} |
||||
|
||||
table tr { |
||||
border: none; |
||||
border-bottom: none; |
||||
} |
||||
|
||||
table th { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
table th,table td { |
||||
border: none !important; |
||||
padding: 6px 13px; |
||||
} |
||||
|
||||
table tr:nth-child(2n) { |
||||
background-color: #F8F8F8; |
||||
} |
||||
|
||||
td p { |
||||
margin: 0 0 15px 0; |
||||
} |
||||
|
||||
div.table-contents td p { |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist * |
||||
{ |
||||
border: none !important; |
||||
background: none !important; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.important p,div.note p,div.tip p,div.warning p { |
||||
color: #6F6F6F; |
||||
line-height: 1.6; |
||||
} |
||||
|
||||
div.important code,div.note code,div.tip code,div.warning code { |
||||
background-color: #F2F2F2 !important; |
||||
border: 1px solid #CCCCCC !important; |
||||
border-radius: 4px !important; |
||||
padding: 1px 3px 0 !important; |
||||
text-shadow: none !important; |
||||
white-space: nowrap !important; |
||||
} |
||||
|
||||
.note th,.tip th,.warning th { |
||||
display: none; |
||||
} |
||||
|
||||
.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td |
||||
{ |
||||
border-right: 1px solid #CCCCCC !important; |
||||
padding-top: 10px; |
||||
} |
||||
|
||||
div.calloutlist p,div.calloutlist td { |
||||
padding: 0; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.calloutlist>table>tbody>tr>td:first-child { |
||||
padding-left: 10px; |
||||
width: 30px !important; |
||||
} |
||||
|
||||
div.important,div.note,div.tip,div.warning { |
||||
margin-left: 0px !important; |
||||
margin-right: 20px !important; |
||||
margin-top: 20px; |
||||
margin-bottom: 20px; |
||||
padding-top: 10px; |
||||
padding-bottom: 10px; |
||||
} |
||||
|
||||
div.toc { |
||||
line-height: 1.2; |
||||
} |
||||
|
||||
dl,dt { |
||||
margin-top: 1px; |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
div.toc>dl>dt { |
||||
font-size: 32px; |
||||
font-weight: bold; |
||||
margin: 30px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dt { |
||||
font-size: 24px; |
||||
font-weight: bold; |
||||
margin: 20px 0 10px 0; |
||||
display: block; |
||||
} |
||||
|
||||
div.toc>dl>dd>dl>dd>dl>dt { |
||||
font-weight: bold; |
||||
font-size: 20px; |
||||
margin: 10px 0 0 0; |
||||
} |
||||
|
||||
tbody.footnotes * { |
||||
border: none !important; |
||||
} |
||||
|
||||
div.footnote p { |
||||
margin: 0; |
||||
line-height: 1; |
||||
} |
||||
|
||||
div.footnote p sup { |
||||
margin-right: 6px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
div.navheader { |
||||
border-bottom: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
div.navfooter { |
||||
border-top: 1px solid #CCCCCC; |
||||
} |
||||
|
||||
.title { |
||||
margin-left: -1em; |
||||
padding-left: 1em; |
||||
} |
||||
|
||||
.title>a { |
||||
position: absolute; |
||||
visibility: hidden; |
||||
display: block; |
||||
font-size: 0.85em; |
||||
margin-top: 0.05em; |
||||
margin-left: -1em; |
||||
vertical-align: text-top; |
||||
color: black; |
||||
} |
||||
|
||||
.title>a:before { |
||||
content: "\00A7"; |
||||
} |
||||
|
||||
.title:hover>a,.title>a:hover,.title:hover>a:hover { |
||||
visibility: visible; |
||||
} |
||||
|
||||
.title:focus>a,.title>a:focus,.title:focus>a:focus { |
||||
outline: 0; |
||||
} |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.2 KiB |