Skip to content

Commit f5ce32b

Browse files
committed
support an init param for the filter to configure whether response is handled "by default"
1 parent a361cab commit f5ce32b

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

src/main/java/org/jruby/rack/UnmappedRackFilter.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class UnmappedRackFilter extends AbstractFilter {
4343
// NOTE: it's true by default for backwards compatibility
4444
private Object resetUnhandledResponse = Boolean.TRUE;
4545

46+
private boolean responseHandledByDefault = true;
47+
4648
private Collection<Integer> responseNotHandledStatuses =
4749
// 403 due containers not supporting PUT/DELETE correctly (Tomcat 6)
4850
// 405 returned by Jetty 7/8 on PUT/DELETE requests by default
@@ -70,7 +72,7 @@ public void init(FilterConfig config) throws ServletException {
7072
String value = config.getInitParameter("resetUnhandledResponse");
7173
if ( value != null ) setResetUnhandledResponseValue(value);
7274

73-
// ResponseCapture.defaultNotHandledStatuses e.g. "403,404,500"
75+
// ResponseCapture.notHandledStatuses e.g. "403,404,500"
7476
value = config.getInitParameter("responseNotHandledStatuses");
7577
if ( value != null ) {
7678
final Set<Integer> statuses = new HashSet<Integer>();
@@ -82,6 +84,11 @@ public void init(FilterConfig config) throws ServletException {
8284
}
8385
responseNotHandledStatuses = statuses;
8486
}
87+
// ResponseCapture.handledByDefault true/false (true by default)
88+
value = config.getInitParameter("responseHandledByDefault");
89+
if ( value != null ) {
90+
responseHandledByDefault = Boolean.parseBoolean(value);
91+
}
8592
}
8693

8794
@Override
@@ -148,6 +155,7 @@ else if ( isResetUnhandledResponseBuffer() ) {
148155
protected ResponseCapture wrapResponse(ServletResponse response) {
149156
final ResponseCapture capture = super.wrapResponse(response);
150157
capture.setNotHandledStatuses( getResponseNotHandledStatuses() );
158+
capture.setHandledByDefault( isResponseHandledByDefault() );
151159
return capture;
152160
}
153161

@@ -188,4 +196,12 @@ public void setDefaultNotHandledStatuses(final Collection<Integer> responseNotHa
188196
responseNotHandledStatuses == null ? Collections.EMPTY_SET : responseNotHandledStatuses;
189197
}
190198

199+
public boolean isResponseHandledByDefault() {
200+
return responseHandledByDefault;
201+
}
202+
203+
public void setResponseHandledByDefault(boolean responseHandledByDefault) {
204+
this.responseHandledByDefault = responseHandledByDefault;
205+
}
206+
191207
}

src/main/java/org/jruby/rack/servlet/ResponseCapture.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@ public class ResponseCapture extends HttpServletResponseWrapper {
2828
private static final String STREAM = "stream";
2929
private static final String WRITER = "writer";
3030

31-
private static Collection<Integer> defaultNotHandledStatuses = Collections.singleton(404);
31+
private static final Collection<Integer> defaultNotHandledStatuses = Collections.singleton(404);
3232

3333
private Integer status;
3434
private Object output;
3535

36+
private boolean handledByDefault;
3637
private Collection<Integer> notHandledStatuses = defaultNotHandledStatuses;
3738

3839
/**
@@ -219,7 +220,7 @@ public boolean isHandled(final HttpServletRequest request) {
219220
// true by default seems very weird but this is best to cover
220221
// "more" containers right out of the box ...
221222
// e.g. Jetty https://github.com/jruby/jruby-rack/issues/175
222-
return handled = true; // return false;
223+
return handled = isHandledByDefault();
223224
}
224225

225226
// consider HTTP OPTIONS with "Allow" header unhandled :
@@ -253,6 +254,14 @@ public void setNotHandledStatuses(final Collection<Integer> notHandledStatuses)
253254
notHandledStatuses == null ? Collections.EMPTY_SET : notHandledStatuses;
254255
}
255256

257+
boolean isHandledByDefault() {
258+
return handledByDefault;
259+
}
260+
261+
public void setHandledByDefault(boolean handledByDefault) {
262+
this.handledByDefault = handledByDefault;
263+
}
264+
256265
/**
257266
* @return true if {@link #getOutputStream()} (or {@link #getWriter()}) has
258267
* been accessed

src/spec/ruby/rack/servlet/response_capture_spec.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
let(:servlet_response) { MockHttpServletResponse.new }
66
let(:response_capture) do
7-
org.jruby.rack.servlet.ResponseCapture.new(servlet_response)
7+
response = org.jruby.rack.servlet.ResponseCapture.new(servlet_response)
8+
response.handled_by_default = true
9+
response
810
end
911

1012
let(:servlet_request) { MockHttpServletRequest.new(@servlet_context) }

0 commit comments

Comments
 (0)