Skip to content

Commit 12b6802

Browse files
Radoslav PetrovNateBrady23
Radoslav Petrov
authored andcommitted
Add filter adding HTTP headers (#4824)
1 parent d65ec6e commit 12b6802

File tree

5 files changed

+49
-16
lines changed

5 files changed

+49
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.glassfish.grizzly.bm;
2+
3+
import java.io.IOException;
4+
5+
import org.glassfish.grizzly.filterchain.FilterChainContext;
6+
import org.glassfish.grizzly.filterchain.NextAction;
7+
import org.glassfish.grizzly.http.HttpBaseFilter;
8+
import org.glassfish.grizzly.http.HttpContent;
9+
import org.glassfish.grizzly.http.HttpPacket;
10+
import org.glassfish.grizzly.http.HttpRequestPacket;
11+
import org.glassfish.grizzly.http.HttpResponsePacket;
12+
import org.glassfish.grizzly.http.util.FastHttpDateFormat;
13+
import org.glassfish.grizzly.http.util.Header;
14+
15+
/**
16+
* Must be added just before the HttpServerFilter i.e. second to last in the filter chain.
17+
*
18+
* @author zloster
19+
*
20+
*/
21+
public class HeadersFilter extends HttpBaseFilter {
22+
23+
@Override
24+
protected void bind(HttpRequestPacket request, HttpResponsePacket response) {
25+
// This is never called. I don't know why.
26+
super.bind(request, response);
27+
}
28+
29+
@Override
30+
public NextAction handleRead(FilterChainContext ctx) throws IOException {
31+
// Taken from HttpServerFilter
32+
final Object message = ctx.getMessage();
33+
if (HttpPacket.isHttp(message)) {
34+
// Otherwise cast message to a HttpContent
35+
final HttpContent httpContent = (HttpContent) message;
36+
final HttpRequestPacket request = (HttpRequestPacket) httpContent.getHttpHeader();
37+
final HttpResponsePacket response = request.getResponse();
38+
response.setHeader(Header.Server, Server.SERVER_VERSION);
39+
response.setHeader(Header.Date, FastHttpDateFormat.getCurrentDate());
40+
}
41+
return super.handleRead(ctx);
42+
}
43+
44+
}

frameworks/Java/grizzly/src/main/java/org/glassfish/grizzly/bm/JsonHttpHandler.java

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package org.glassfish.grizzly.bm;
22

3-
import com.fasterxml.jackson.databind.*;
4-
53
import org.glassfish.grizzly.http.server.HttpHandler;
64
import org.glassfish.grizzly.http.server.Request;
75
import org.glassfish.grizzly.http.server.RequestExecutorProvider;
86
import org.glassfish.grizzly.http.server.Response;
97
import org.glassfish.grizzly.http.util.ContentType;
10-
import org.glassfish.grizzly.http.util.FastHttpDateFormat;
11-
import org.glassfish.grizzly.http.util.Header;
8+
9+
import com.fasterxml.jackson.databind.ObjectMapper;
1210

1311
/**
1412
* JSON test
@@ -27,9 +25,6 @@ public static class HelloMessage {
2725
@Override
2826
public void service(final Request request, final Response response) throws Exception {
2927
response.setContentType(CONTENT_TYPE);
30-
response.setHeader(Header.Server, Server.SERVER_VERSION);
31-
response.setHeader(Header.Date, FastHttpDateFormat.getCurrentDate());
32-
3328
// Write JSON encoded message to the response.
3429
MAPPER.writeValue(response.getOutputStream(), new HelloMessage());
3530
}

frameworks/Java/grizzly/src/main/java/org/glassfish/grizzly/bm/PlainText2HttpHandler.java

-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import org.glassfish.grizzly.http.server.RequestExecutorProvider;
66
import org.glassfish.grizzly.http.server.Response;
77
import org.glassfish.grizzly.http.util.ContentType;
8-
import org.glassfish.grizzly.http.util.FastHttpDateFormat;
9-
import org.glassfish.grizzly.http.util.Header;
108
import org.glassfish.grizzly.utils.Charsets;
119

1210
/**
@@ -22,9 +20,6 @@ public class PlainText2HttpHandler extends HttpHandler {
2220
@Override
2321
public void service(final Request request, final Response response) throws Exception {
2422
response.setContentType(CONTENT_TYPE);
25-
response.setHeader(Header.Server, Server.SERVER_VERSION);
26-
response.setHeader(Header.Date, FastHttpDateFormat.getCurrentDate());
27-
2823
response.getOutputStream().write(HELLO_WORLD_BYTES);
2924
}
3025

frameworks/Java/grizzly/src/main/java/org/glassfish/grizzly/bm/PlainTextHttpHandler.java

-4
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import org.glassfish.grizzly.http.server.RequestExecutorProvider;
66
import org.glassfish.grizzly.http.server.Response;
77
import org.glassfish.grizzly.http.util.ContentType;
8-
import org.glassfish.grizzly.http.util.FastHttpDateFormat;
9-
import org.glassfish.grizzly.http.util.Header;
108

119
/**
1210
* Plaintext test case
@@ -18,8 +16,6 @@ public class PlainTextHttpHandler extends HttpHandler {
1816
@Override
1917
public void service(final Request request, final Response response) throws Exception {
2018
response.setContentType(CONTENT_TYPE);
21-
response.setHeader(Header.Server, Server.SERVER_VERSION);
22-
response.setHeader(Header.Date, FastHttpDateFormat.getCurrentDate());
2319
response.getWriter().write("Hello, World!");
2420
}
2521

frameworks/Java/grizzly/src/main/java/org/glassfish/grizzly/bm/Server.java

+3
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public static void main(String[] args) throws Exception {
5959

6060
try {
6161
httpServer.start();
62+
// This can't be done before the call to start(). Also note the
63+
// positions
64+
httpServer.getListener("http-listener").getFilterChain().add(3, new HeadersFilter());
6265
synchronized (Server.class) {
6366
Server.class.wait();
6467
}

0 commit comments

Comments
 (0)