1 package org.onap.ccsdk.apps.filters;
3 import java.io.IOException;
4 import java.util.Collections;
5 import java.util.Enumeration;
6 import java.util.LinkedList;
9 import javax.servlet.Filter;
10 import javax.servlet.FilterChain;
11 import javax.servlet.ServletException;
12 import javax.servlet.ServletRequest;
13 import javax.servlet.ServletResponse;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletRequestWrapper;
17 import org.springframework.core.Ordered;
18 import org.springframework.core.annotation.Order;
19 import org.springframework.stereotype.Component;
22 @Order(Ordered.HIGHEST_PRECEDENCE)
23 public class ContentTypeFilter implements Filter {
25 String DEFAULT_CONTENT_TYPE = "application/json";
28 public void doFilter(ServletRequest httpReq, ServletResponse httpResp, FilterChain chain)
29 throws IOException, ServletException {
30 String defaultContentType = System.getProperty("ccsdk.defaults.content-type", DEFAULT_CONTENT_TYPE);
32 chain.doFilter(new DefaultContentTypeHttpRequest((HttpServletRequest) httpReq, defaultContentType), httpResp);
36 private class DefaultContentTypeHttpRequest extends HttpServletRequestWrapper {
37 HttpServletRequest httpRequest;
38 String defaultContentType;
39 boolean hasContentType;
41 List<String> headerNames;
43 public DefaultContentTypeHttpRequest(HttpServletRequest httpRequest, String defaultContentType) {
45 this.httpRequest = httpRequest;
46 this.defaultContentType = defaultContentType;
47 headerNames = new LinkedList<String>();
48 Enumeration<String> headerNameEnum = httpRequest.getHeaderNames();
49 hasContentType = false;
50 while (headerNameEnum.hasMoreElements()) {
51 String curHeaderName = headerNameEnum.nextElement();
52 if ("Content-Type".equalsIgnoreCase(curHeaderName)) {
53 hasContentType = true;
55 headerNames.add(curHeaderName);
57 if (!hasContentType) {
58 headerNames.add("Content-Type");
64 public String getHeader(String name) {
65 if (name.equalsIgnoreCase("Content-Type")) {
66 return getContentType();
68 return super.getHeader(name);
73 public Enumeration<String> getHeaderNames() {
74 return(Collections.enumeration(headerNames));
78 public String getContentType() {
80 return super.getContentType();
82 return defaultContentType;