keycloak-service
公開メンバ関数 | 静的公開メンバ関数 | 静的公開変数類 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.services.resources.Cors クラス
org.keycloak.services.resources.Cors 連携図
Collaboration graph

公開メンバ関数

 Cors (HttpRequest request, ResponseBuilder response)
 
 Cors (HttpRequest request)
 
Cors builder (ResponseBuilder builder)
 
Cors preflight ()
 
Cors auth ()
 
Cors allowAllOrigins ()
 
Cors allowedOrigins (UriInfo uriInfo, ClientModel client)
 
Cors allowedOrigins (AccessToken token)
 
Cors allowedOrigins (String... allowedOrigins)
 
Cors allowedMethods (String... allowedMethods)
 
Cors exposedHeaders (String... exposedHeaders)
 
Response build ()
 
void build (HttpResponse response)
 

静的公開メンバ関数

static Cors add (HttpRequest request, ResponseBuilder response)
 
static Cors add (HttpRequest request)
 

静的公開変数類

static final long DEFAULT_MAX_AGE = TimeUnit.HOURS.toSeconds(1)
 
static final String DEFAULT_ALLOW_METHODS = "GET, HEAD, OPTIONS"
 
static final String DEFAULT_ALLOW_HEADERS = "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"
 
static final String ORIGIN_HEADER = "Origin"
 
static final String AUTHORIZATION_HEADER = "Authorization"
 
static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"
 
static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"
 
static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"
 
static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers"
 
static final String ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials"
 
static final String ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age"
 
static final String ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD = "*"
 
static final String INCLUDE_REDIRECTS = "+"
 

非公開変数類

HttpRequest request
 
ResponseBuilder builder
 
Set< String > allowedOrigins
 
Set< String > allowedMethods
 
Set< String > exposedHeaders
 
boolean preflight
 
boolean auth
 

静的非公開変数類

static final Logger logger = Logger.getLogger(Cors.class)
 

詳解

著者
Stian Thorgersen

構築子と解体子

◆ Cors() [1/2]

org.keycloak.services.resources.Cors.Cors ( HttpRequest  request,
ResponseBuilder  response 
)
inline
69  {
70  this.request = request;
71  this.builder = response;
72  }
ResponseBuilder builder
Definition: Cors.java:61
HttpRequest request
Definition: Cors.java:60

◆ Cors() [2/2]

org.keycloak.services.resources.Cors.Cors ( HttpRequest  request)
inline
74  {
75  this.request = request;
76  }
HttpRequest request
Definition: Cors.java:60

関数詳解

◆ add() [1/2]

static Cors org.keycloak.services.resources.Cors.add ( HttpRequest  request,
ResponseBuilder  response 
)
inlinestatic
78  {
79  return new Cors(request, response);
80  }
Cors(HttpRequest request, ResponseBuilder response)
Definition: Cors.java:69
HttpRequest request
Definition: Cors.java:60

◆ add() [2/2]

static Cors org.keycloak.services.resources.Cors.add ( HttpRequest  request)
inlinestatic
82  {
83  return new Cors(request);
84  }
Cors(HttpRequest request, ResponseBuilder response)
Definition: Cors.java:69
HttpRequest request
Definition: Cors.java:60

◆ allowAllOrigins()

Cors org.keycloak.services.resources.Cors.allowAllOrigins ( )
inline
101  {
102  allowedOrigins = Collections.singleton(ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD);
103  return this;
104  }
static final String ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD
Definition: Cors.java:57
Set< String > allowedOrigins
Definition: Cors.java:62

◆ allowedMethods()

Cors org.keycloak.services.resources.Cors.allowedMethods ( String...  allowedMethods)
inline
127  {
128  this.allowedMethods = new HashSet<>(Arrays.asList(allowedMethods));
129  return this;
130  }
Set< String > allowedMethods
Definition: Cors.java:63

◆ allowedOrigins() [1/3]

Cors org.keycloak.services.resources.Cors.allowedOrigins ( UriInfo  uriInfo,
ClientModel  client 
)
inline
106  {
107  if (client != null) {
108  allowedOrigins = WebOriginsUtils.resolveValidWebOrigins(uriInfo, client);
109  }
110  return this;
111  }
Set< String > allowedOrigins
Definition: Cors.java:62

◆ allowedOrigins() [2/3]

Cors org.keycloak.services.resources.Cors.allowedOrigins ( AccessToken  token)
inline
113  {
114  if (token != null) {
115  allowedOrigins = token.getAllowedOrigins();
116  }
117  return this;
118  }
Set< String > allowedOrigins
Definition: Cors.java:62

◆ allowedOrigins() [3/3]

Cors org.keycloak.services.resources.Cors.allowedOrigins ( String...  allowedOrigins)
inline
120  {
121  if (allowedOrigins != null && allowedOrigins.length > 0) {
122  this.allowedOrigins = new HashSet<>(Arrays.asList(allowedOrigins));
123  }
124  return this;
125  }
Set< String > allowedOrigins
Definition: Cors.java:62

◆ auth()

Cors org.keycloak.services.resources.Cors.auth ( )
inline
96  {
97  auth = true;
98  return this;
99  }
Cors auth()
Definition: Cors.java:96

◆ build() [1/2]

Response org.keycloak.services.resources.Cors.build ( )
inline
137  {
138  String origin = request.getHttpHeaders().getRequestHeaders().getFirst(ORIGIN_HEADER);
139  if (origin == null) {
140  logger.trace("No origin header ignoring");
141  return builder.build();
142  }
143 
144  if (!preflight && (allowedOrigins == null || (!allowedOrigins.contains(origin) && !allowedOrigins.contains(ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD)))) {
145  if (logger.isDebugEnabled()) {
146  logger.debugv("Invalid CORS request: origin {0} not in allowed origins {1}", origin, Arrays.toString(allowedOrigins.toArray()));
147  }
148  return builder.build();
149  }
150 
151  builder.header(ACCESS_CONTROL_ALLOW_ORIGIN, origin);
152 
153  if (preflight) {
154  if (allowedMethods != null) {
155  builder.header(ACCESS_CONTROL_ALLOW_METHODS, CollectionUtil.join(allowedMethods));
156  } else {
158  }
159  }
160 
161  if (!preflight && exposedHeaders != null) {
162  builder.header(ACCESS_CONTROL_EXPOSE_HEADERS, CollectionUtil.join(exposedHeaders));
163  }
164 
165  builder.header(ACCESS_CONTROL_ALLOW_CREDENTIALS, Boolean.toString(auth));
166 
167  if (preflight) {
168  if (auth) {
170  } else {
172  }
173  }
174 
175  if (preflight) {
177  }
178 
179  logger.debug("Added CORS headers to response");
180 
181  return builder.build();
182  }
static final String ACCESS_CONTROL_ALLOW_ORIGIN
Definition: Cors.java:50
Cors auth()
Definition: Cors.java:96
static final String ACCESS_CONTROL_EXPOSE_HEADERS
Definition: Cors.java:53
static final long DEFAULT_MAX_AGE
Definition: Cors.java:43
static final String ACCESS_CONTROL_MAX_AGE
Definition: Cors.java:55
static final String DEFAULT_ALLOW_HEADERS
Definition: Cors.java:45
Set< String > exposedHeaders
Definition: Cors.java:64
static final String DEFAULT_ALLOW_METHODS
Definition: Cors.java:44
static final String ACCESS_CONTROL_ALLOW_HEADERS
Definition: Cors.java:52
static final String AUTHORIZATION_HEADER
Definition: Cors.java:48
static final String ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD
Definition: Cors.java:57
Cors preflight()
Definition: Cors.java:91
ResponseBuilder builder
Definition: Cors.java:61
Set< String > allowedOrigins
Definition: Cors.java:62
Set< String > allowedMethods
Definition: Cors.java:63
HttpRequest request
Definition: Cors.java:60
static final String ACCESS_CONTROL_ALLOW_METHODS
Definition: Cors.java:51
static final String ORIGIN_HEADER
Definition: Cors.java:47
static final Logger logger
Definition: Cors.java:41
static final String ACCESS_CONTROL_ALLOW_CREDENTIALS
Definition: Cors.java:54

◆ build() [2/2]

void org.keycloak.services.resources.Cors.build ( HttpResponse  response)
inline
184  {
185  String origin = request.getHttpHeaders().getRequestHeaders().getFirst(ORIGIN_HEADER);
186  if (origin == null) {
187  logger.trace("No origin header ignoring");
188  return;
189  }
190 
191  if (!preflight && (allowedOrigins == null || (!allowedOrigins.contains(origin) && !allowedOrigins.contains(ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD)))) {
192  if (logger.isDebugEnabled()) {
193  logger.debugv("Invalid CORS request: origin {0} not in allowed origins {1}", origin, Arrays.toString(allowedOrigins.toArray()));
194  }
195  return;
196  }
197 
199  response.getOutputHeaders().add(ACCESS_CONTROL_ALLOW_ORIGIN, ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD);
200  } else {
201  response.getOutputHeaders().add(ACCESS_CONTROL_ALLOW_ORIGIN, origin);
202  }
203 
204  if (preflight) {
205  if (allowedMethods != null) {
206  response.getOutputHeaders().add(ACCESS_CONTROL_ALLOW_METHODS, CollectionUtil.join(allowedMethods));
207  } else {
208  response.getOutputHeaders().add(ACCESS_CONTROL_ALLOW_METHODS, DEFAULT_ALLOW_METHODS);
209  }
210  }
211 
212  if (!preflight && exposedHeaders != null) {
213  response.getOutputHeaders().add(ACCESS_CONTROL_EXPOSE_HEADERS, CollectionUtil.join(exposedHeaders));
214  }
215 
216  response.getOutputHeaders().add(ACCESS_CONTROL_ALLOW_CREDENTIALS, Boolean.toString(auth));
217 
218  if (preflight) {
219  if (auth) {
220  response.getOutputHeaders().add(ACCESS_CONTROL_ALLOW_HEADERS, String.format("%s, %s", DEFAULT_ALLOW_HEADERS, AUTHORIZATION_HEADER));
221  } else {
222  response.getOutputHeaders().add(ACCESS_CONTROL_ALLOW_HEADERS, DEFAULT_ALLOW_HEADERS);
223  }
224  }
225 
226  if (preflight) {
227  response.getOutputHeaders().add(ACCESS_CONTROL_MAX_AGE, DEFAULT_MAX_AGE);
228  }
229 
230  logger.debug("Added CORS headers to response");
231  }
static final String ACCESS_CONTROL_ALLOW_ORIGIN
Definition: Cors.java:50
Cors auth()
Definition: Cors.java:96
static final String ACCESS_CONTROL_EXPOSE_HEADERS
Definition: Cors.java:53
static final long DEFAULT_MAX_AGE
Definition: Cors.java:43
static final String ACCESS_CONTROL_MAX_AGE
Definition: Cors.java:55
static final String DEFAULT_ALLOW_HEADERS
Definition: Cors.java:45
Set< String > exposedHeaders
Definition: Cors.java:64
static final String DEFAULT_ALLOW_METHODS
Definition: Cors.java:44
static final String ACCESS_CONTROL_ALLOW_HEADERS
Definition: Cors.java:52
static final String AUTHORIZATION_HEADER
Definition: Cors.java:48
static final String ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD
Definition: Cors.java:57
Cors preflight()
Definition: Cors.java:91
Set< String > allowedOrigins
Definition: Cors.java:62
Set< String > allowedMethods
Definition: Cors.java:63
HttpRequest request
Definition: Cors.java:60
static final String ACCESS_CONTROL_ALLOW_METHODS
Definition: Cors.java:51
static final String ORIGIN_HEADER
Definition: Cors.java:47
static final Logger logger
Definition: Cors.java:41
static final String ACCESS_CONTROL_ALLOW_CREDENTIALS
Definition: Cors.java:54

◆ builder()

Cors org.keycloak.services.resources.Cors.builder ( ResponseBuilder  builder)
inline
86  {
87  this.builder = builder;
88  return this;
89  }
ResponseBuilder builder
Definition: Cors.java:61

◆ exposedHeaders()

Cors org.keycloak.services.resources.Cors.exposedHeaders ( String...  exposedHeaders)
inline
132  {
133  this.exposedHeaders = new HashSet<>(Arrays.asList(exposedHeaders));
134  return this;
135  }
Set< String > exposedHeaders
Definition: Cors.java:64

◆ preflight()

Cors org.keycloak.services.resources.Cors.preflight ( )
inline
91  {
92  preflight = true;
93  return this;
94  }
Cors preflight()
Definition: Cors.java:91

メンバ詳解

◆ ACCESS_CONTROL_ALLOW_CREDENTIALS

final String org.keycloak.services.resources.Cors.ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials"
static

◆ ACCESS_CONTROL_ALLOW_HEADERS

final String org.keycloak.services.resources.Cors.ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"
static

◆ ACCESS_CONTROL_ALLOW_METHODS

final String org.keycloak.services.resources.Cors.ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"
static

◆ ACCESS_CONTROL_ALLOW_ORIGIN

final String org.keycloak.services.resources.Cors.ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"
static

◆ ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD

final String org.keycloak.services.resources.Cors.ACCESS_CONTROL_ALLOW_ORIGIN_WILDCARD = "*"
static

◆ ACCESS_CONTROL_EXPOSE_HEADERS

final String org.keycloak.services.resources.Cors.ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers"
static

◆ ACCESS_CONTROL_MAX_AGE

final String org.keycloak.services.resources.Cors.ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age"
static

◆ allowedMethods

Set<String> org.keycloak.services.resources.Cors.allowedMethods
private

◆ allowedOrigins

Set<String> org.keycloak.services.resources.Cors.allowedOrigins
private

◆ auth

boolean org.keycloak.services.resources.Cors.auth
private

◆ AUTHORIZATION_HEADER

final String org.keycloak.services.resources.Cors.AUTHORIZATION_HEADER = "Authorization"
static

◆ builder

ResponseBuilder org.keycloak.services.resources.Cors.builder
private

◆ DEFAULT_ALLOW_HEADERS

final String org.keycloak.services.resources.Cors.DEFAULT_ALLOW_HEADERS = "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"
static

◆ DEFAULT_ALLOW_METHODS

final String org.keycloak.services.resources.Cors.DEFAULT_ALLOW_METHODS = "GET, HEAD, OPTIONS"
static

◆ DEFAULT_MAX_AGE

final long org.keycloak.services.resources.Cors.DEFAULT_MAX_AGE = TimeUnit.HOURS.toSeconds(1)
static

◆ exposedHeaders

Set<String> org.keycloak.services.resources.Cors.exposedHeaders
private

◆ INCLUDE_REDIRECTS

final String org.keycloak.services.resources.Cors.INCLUDE_REDIRECTS = "+"
static

◆ logger

final Logger org.keycloak.services.resources.Cors.logger = Logger.getLogger(Cors.class)
staticprivate

◆ ORIGIN_HEADER

final String org.keycloak.services.resources.Cors.ORIGIN_HEADER = "Origin"
static

◆ preflight

boolean org.keycloak.services.resources.Cors.preflight
private

◆ request

HttpRequest org.keycloak.services.resources.Cors.request
private

このクラス詳解は次のファイルから抽出されました: