From 1ff6812d0b8c012129439307eb486fda763fc8d4 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Tue, 24 Apr 2018 17:10:52 +0200 Subject: Make CorsRequestFilterBase extend JsonSecurityRequestFilterBase --- .../security/cors/CorsRequestFilterBase.java | 51 ++++------------------ 1 file changed, 8 insertions(+), 43 deletions(-) (limited to 'jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors') diff --git a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java index 7bdbd7eddf4..eafe17153ad 100644 --- a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java +++ b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cors/CorsRequestFilterBase.java @@ -1,15 +1,9 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.jdisc.http.filter.security.cors; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.yahoo.jdisc.Response; -import com.yahoo.jdisc.handler.FastContentWriter; -import com.yahoo.jdisc.handler.ResponseDispatch; -import com.yahoo.jdisc.handler.ResponseHandler; import com.yahoo.jdisc.http.filter.DiscFilterRequest; -import com.yahoo.jdisc.http.filter.SecurityRequestFilter; +import com.yahoo.jdisc.http.filter.security.base.JsonSecurityRequestFilterBase; import java.util.HashSet; import java.util.Optional; @@ -23,9 +17,7 @@ import static com.yahoo.jdisc.http.filter.security.cors.CorsLogic.createCorsResp * * @author bjorncs */ -public abstract class CorsRequestFilterBase implements SecurityRequestFilter { - - private static final ObjectMapper mapper = new ObjectMapper(); +public abstract class CorsRequestFilterBase extends JsonSecurityRequestFilterBase { private final Set allowedUrls; @@ -38,44 +30,17 @@ public abstract class CorsRequestFilterBase implements SecurityRequestFilter { } @Override - public final void filter(DiscFilterRequest request, ResponseHandler handler) { - filter(request) - .ifPresent(errorResponse -> sendErrorResponse(request, errorResponse, handler)); + public final Optional filter(DiscFilterRequest request) { + Optional errorResponse = filterRequest(request); + errorResponse.ifPresent(response -> addCorsHeaders(request, response.getResponse())); + return errorResponse; } - protected abstract Optional filter(DiscFilterRequest request); - - private void sendErrorResponse(DiscFilterRequest request, - ErrorResponse errorResponse, - ResponseHandler responseHandler) { - Response response = new Response(errorResponse.statusCode); - addHeaders(request, response); - writeResponse(errorResponse, responseHandler, response); - } + protected abstract Optional filterRequest(DiscFilterRequest request); - private void addHeaders(DiscFilterRequest request, Response response) { + private void addCorsHeaders(DiscFilterRequest request, Response response) { createCorsResponseHeaders(request.getHeader("Origin"), allowedUrls) .forEach(response.headers()::add); - response.headers().add("Content-Type", "application/json"); } - private void writeResponse(ErrorResponse errorResponse, ResponseHandler responseHandler, Response response) { - ObjectNode errorMessage = mapper.createObjectNode(); - errorMessage.put("message", errorResponse.message); - try (FastContentWriter writer = ResponseDispatch.newInstance(response).connectFastWriter(responseHandler)) { - writer.write(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorMessage)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - } - - protected static class ErrorResponse { - final int statusCode; - final String message; - - public ErrorResponse(int statusCode, String message) { - this.statusCode = statusCode; - this.message = message; - } - } } -- cgit v1.2.3