Skip to content

Commit cd58958

Browse files
committed
#New: Add OPTIONS Method for All Java WebServices (REST + API Objects). Add "Allow" Headers + CORS Headers.
1 parent 1c9653b commit cd58958

File tree

5 files changed

+53
-55
lines changed

5 files changed

+53
-55
lines changed

wrappercommon/src/main/java/com/genexus/cors/CORSHelper.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,25 @@ public class CORSHelper {
1111
private static String CORS_ALLOWED_HEADERS = "*";
1212

1313
public static HashMap<String, String> getCORSHeaders(String requestRequiredHeaders) {
14+
return getCORSHeaders(requestRequiredHeaders, CORS_ALLOWED_METHODS);
15+
}
16+
public static HashMap<String, String> getCORSHeaders(String requestRequiredHeaders, String allowedMethods) {
1417
String corsAllowedOrigin = SpecificImplementation.Application.getClientPreferences().getProperty(CORS_ALLOWED_ORIGIN, "");
15-
if (corsAllowedOrigin == null || corsAllowedOrigin.isEmpty()) {
18+
if (corsAllowedOrigin == null || corsAllowedOrigin.isEmpty() || allowedMethods.isEmpty()) {
1619
return null;
1720
}
21+
1822
HashMap<String, String> corsHeaders = new HashMap<>();
1923
corsHeaders.put(
2024
"Access-Control-Allow-Origin", corsAllowedOrigin);
2125
corsHeaders.put(
2226
"Access-Control-Allow-Credentials", "true");
23-
2427
corsHeaders.put(
2528
"Access-Control-Allow-Headers",
2629
requestRequiredHeaders == null || requestRequiredHeaders.isEmpty() ? CORS_ALLOWED_HEADERS : requestRequiredHeaders);
27-
2830
corsHeaders.put(
2931
"Access-Control-Allow-Methods",
30-
CORS_ALLOWED_METHODS);
32+
allowedMethods);
3133
corsHeaders.put(
3234
"Access-Control-Max-Age",
3335
CORS_MAX_AGE_SECONDS);

wrapperjakarta/src/main/java/com/genexus/ws/JAXRSCorsFilter.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

wrapperjakarta/src/main/java/com/genexus/ws/rs/core/Response.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package com.genexus.ws.rs.core;
22

3+
import com.genexus.cors.CORSHelper;
4+
import com.genexus.servlet.http.IHttpServletRequest;
5+
6+
import java.util.HashMap;
7+
38
public abstract class Response extends jakarta.ws.rs.core.Response{
49

510
public static Response.ResponseBuilder notModifiedWrapped() {
@@ -14,6 +19,24 @@ public static Response.ResponseBuilder okWrapped() {
1419
return new Response.ResponseBuilder(jakarta.ws.rs.core.Response.ok());
1520
}
1621

22+
public static Response.ResponseBuilder options(String allowedMethods) {
23+
Response.ResponseBuilder builder = okWrapped();
24+
builder.header("Allow", allowedMethods);
25+
return builder;
26+
}
27+
28+
private static void addCorsHeaders(IHttpServletRequest request, IResponseBuilder builder) {
29+
HashMap<String, String> corsHeaders = CORSHelper.getCORSHeaders(request.getHeader("Access-Control-Request-Headers"), request.getMethod());
30+
for (String headerName : corsHeaders.keySet()) {
31+
builder.header(headerName,corsHeaders.get(headerName));
32+
}
33+
}
34+
35+
public static jakarta.ws.rs.core.Response build(IHttpServletRequest request, IResponseBuilder builder) {
36+
addCorsHeaders(request, builder);
37+
return (jakarta.ws.rs.core.Response)builder.build();
38+
}
39+
1740
public static Response.ResponseBuilder notFound() {
1841
return new Response.ResponseBuilder(jakarta.ws.rs.core.Response.status(Status.NOT_FOUND));
1942
}

wrapperjavax/src/main/java/com/genexus/ws/JAXRSCorsFilter.java

Lines changed: 0 additions & 26 deletions
This file was deleted.

wrapperjavax/src/main/java/com/genexus/ws/rs/core/Response.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package com.genexus.ws.rs.core;
22

3+
import com.genexus.cors.CORSHelper;
4+
import com.genexus.servlet.http.IHttpServletRequest;
5+
6+
import java.util.HashMap;
7+
38
public abstract class Response extends javax.ws.rs.core.Response{
49

510
public static Response.ResponseBuilder notModifiedWrapped() {
@@ -13,6 +18,25 @@ public static Response.ResponseBuilder okWrapped(Object entity) {
1318
public static Response.ResponseBuilder okWrapped() {
1419
return new Response.ResponseBuilder(javax.ws.rs.core.Response.ok());
1520
}
21+
22+
public static Response.ResponseBuilder options(String allowedMethods) {
23+
Response.ResponseBuilder builder = new Response.ResponseBuilder(javax.ws.rs.core.Response.ok());
24+
builder.header("Allow", allowedMethods);
25+
return builder;
26+
}
27+
28+
private static void addCorsHeaders(IHttpServletRequest request, IResponseBuilder builder) {
29+
HashMap<String, String> corsHeaders = CORSHelper.getCORSHeaders(request.getHeader("Access-Control-Request-Headers"), request.getMethod());
30+
for (String headerName : corsHeaders.keySet()) {
31+
builder.header(headerName,corsHeaders.get(headerName));
32+
}
33+
}
34+
35+
public static javax.ws.rs.core.Response build(IHttpServletRequest request, IResponseBuilder builder) {
36+
addCorsHeaders(request, builder);
37+
return (javax.ws.rs.core.Response)builder.build();
38+
}
39+
1640
public static Response.ResponseBuilder notFound() {
1741
return new Response.ResponseBuilder(javax.ws.rs.core.Response.status(Status.NOT_FOUND));
1842
}

0 commit comments

Comments
 (0)