CorsHandler Class — netty Architecture
Architecture documentation for the CorsHandler class in CorsHandler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 48d2af19_d0e9_a2f5_8280_607eb2335be4["CorsHandler"] 9d37344e_3c17_c372_7c20_655568ee541c["CorsHandler.java"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|defined in| 9d37344e_3c17_c372_7c20_655568ee541c cdd15bb6_b29c_2cdf_d4c6_229d1d89d815["CorsHandler()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| cdd15bb6_b29c_2cdf_d4c6_229d1d89d815 027a5736_cffb_b2ba_1d21_bab8955f01f6["channelRead()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 027a5736_cffb_b2ba_1d21_bab8955f01f6 a3528954_dd41_114c_963f_7d9056bea918["handlePreflight()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| a3528954_dd41_114c_963f_7d9056bea918 95c218d3_1c82_797e_8203_47f2c7d44e6a["setPreflightHeaders()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 95c218d3_1c82_797e_8203_47f2c7d44e6a 9baaa477_e3b4_9f0a_b3ae_b8d686d67a05["CorsConfig()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 9baaa477_e3b4_9f0a_b3ae_b8d686d67a05 443bc456_062e_6158_b794_7d52bf18c800["setOrigin()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 443bc456_062e_6158_b794_7d52bf18c800 77dbe6d0_a985_c376_24e3_276a343b55c7["echoRequestOrigin()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 77dbe6d0_a985_c376_24e3_276a343b55c7 97c0ae02_8802_ee09_1971_d1ef0b1db82c["setVaryHeader()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 97c0ae02_8802_ee09_1971_d1ef0b1db82c bf446f18_42d8_aaab_2a6e_04a99bb4b179["setAnyOrigin()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| bf446f18_42d8_aaab_2a6e_04a99bb4b179 958e1896_1b91_bbf4_ba96_e358efbfb976["setNullOrigin()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 958e1896_1b91_bbf4_ba96_e358efbfb976 d0b437b7_a674_7261_9478_519e18bcedff["setAllowCredentials()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| d0b437b7_a674_7261_9478_519e18bcedff 9d53585d_ffbc_c503_7ed7_7772002f41b2["isPreflightRequest()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 9d53585d_ffbc_c503_7ed7_7772002f41b2 2f9be2d2_ca57_b53c_0e43_e64bbb04376b["setExposeHeaders()"] 48d2af19_d0e9_a2f5_8280_607eb2335be4 -->|method| 2f9be2d2_ca57_b53c_0e43_e64bbb04376b
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsHandler.java lines 53–288
public class CorsHandler extends ChannelDuplexHandler {
private static final InternalLogger logger = InternalLoggerFactory.getInstance(CorsHandler.class);
private static final String ANY_ORIGIN = "*";
private static final String NULL_ORIGIN = "null";
private CorsConfig config;
private HttpRequest request;
private final List<CorsConfig> configList;
private final boolean isShortCircuit;
private boolean consumeContent;
/**
* Creates a new instance with a single {@link CorsConfig}.
*/
public CorsHandler(final CorsConfig config) {
this(Collections.singletonList(checkNotNull(config, "config")), config.isShortCircuit());
}
/**
* Creates a new instance with the specified config list. If more than one
* config matches a certain origin, the first in the List will be used.
*
* @param configList List of {@link CorsConfig}
* @param isShortCircuit Same as {@link CorsConfig#isShortCircuit} but applicable to all supplied configs.
*/
public CorsHandler(final List<CorsConfig> configList, boolean isShortCircuit) {
checkNonEmpty(configList, "configList");
this.configList = configList;
this.isShortCircuit = isShortCircuit;
}
@Override
public void channelRead(final ChannelHandlerContext ctx, final Object msg) throws Exception {
if (msg instanceof HttpRequest) {
request = (HttpRequest) msg;
final String origin = request.headers().get(HttpHeaderNames.ORIGIN);
config = getForOrigin(origin);
if (isPreflightRequest(request)) {
handlePreflight(ctx, request);
// Enable consumeContent so that all following HttpContent
// for this request will be released and not propagated downstream.
consumeContent = true;
return;
}
if (isShortCircuit && !(origin == null || config != null)) {
forbidden(ctx, request);
consumeContent = true;
return;
}
// This request is forwarded, stop discarding
consumeContent = false;
ctx.fireChannelRead(msg);
return;
}
if (consumeContent && (msg instanceof HttpContent)) {
ReferenceCountUtil.release(msg);
return;
}
ctx.fireChannelRead(msg);
}
private void handlePreflight(final ChannelHandlerContext ctx, final HttpRequest request) {
final HttpResponse response = new DefaultFullHttpResponse(
request.protocolVersion(),
OK,
Unpooled.buffer(0),
DefaultHttpHeadersFactory.headersFactory().withCombiningHeaders(true),
DefaultHttpHeadersFactory.trailersFactory().withCombiningHeaders(true));
if (setOrigin(response)) {
setAllowMethods(response);
setAllowHeaders(response);
setAllowCredentials(response);
setMaxAge(response);
setPreflightHeaders(response);
setAllowPrivateNetwork(response);
}
if (!response.headers().contains(HttpHeaderNames.CONTENT_LENGTH)) {
Source
Frequently Asked Questions
What is the CorsHandler class?
CorsHandler is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsHandler.java.
Where is CorsHandler defined?
CorsHandler is defined in codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsHandler.java at line 53.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free