/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.fuseki.servlets ;
import java.util.concurrent.atomic.AtomicLong ;
import javax.servlet.http.HttpServlet ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import org.apache.jena.atlas.lib.StrUtils ;
import org.apache.jena.fuseki.Fuseki ;
import org.apache.jena.riot.web.HttpNames ;
/**
* Addition HTTP Servlet operations.
*/
public abstract class ServletBase extends HttpServlet {
private static final long serialVersionUID = -4391231243228221820L;
public static final String METHOD_DELETE = "DELETE" ;
public static final String METHOD_HEAD = "HEAD" ;
public static final String METHOD_GET = "GET" ;
public static final String METHOD_OPTIONS = "OPTIONS" ;
public static final String METHOD_POST = "POST" ;
public static final String METHOD_PUT = "PUT" ;
public static final String METHOD_TRACE = "TRACE" ;
public static final String METHOD_PATCH = "PATCH" ;
private static AtomicLong requestIdAlloc = new AtomicLong(0) ;
protected ServletBase() {}
/**
* Helper method which gets a unique request ID and appends it as a header
* to the response
*
* @param request
* HTTP Request
* @param response
* HTTP Response
* @return Request ID
*/
protected static long allocRequestId(HttpServletRequest request, HttpServletResponse response) {
long id = requestIdAlloc.incrementAndGet() ;
addRequestId(response, id) ;
return id ;
}
/**
* Helper method for attaching a request ID to a response as a header
*
* @param response
* Response
* @param id
* Request ID
*/
protected static void addRequestId(HttpServletResponse response, long id) {
response.addHeader("Fuseki-Request-ID", Long.toString(id)) ;
}
static final String varyHeaderSetting = StrUtils.strjoin(",",
HttpNames.hAccept,
HttpNames.hAcceptEncoding,
HttpNames.hAcceptCharset) ;
public static void setVaryHeader(HttpServletResponse httpResponse) {
httpResponse.setHeader(HttpNames.hVary, varyHeaderSetting) ;
}
/** Done via web.xml */
public static boolean CORS_ENABLED = false ;
public static void setCommonHeadersForOptions(HttpServletResponse httpResponse) {
if ( CORS_ENABLED )
httpResponse.setHeader(HttpNames.hAccessControlAllowHeaders, "X-Requested-With, Content-Type, Authorization") ;
setCommonHeaders(httpResponse) ;
}
public static void setCommonHeaders(HttpServletResponse httpResponse) {
if ( CORS_ENABLED )
httpResponse.setHeader(HttpNames.hAccessControlAllowOrigin, "*") ;
if ( Fuseki.outputFusekiServerHeader )
httpResponse.setHeader(HttpNames.hServer, Fuseki.serverHttpName) ;
}
}