Welcome to Code Diaries


Welcome to the one place where you can probably find any kind of C++ or Java Tutorial. From templates and database pools to beans and JNDI, for unix and Windows. We have it all. Cant find what you need? Take a look at the tutorial trail Tutorial Trail. All the examples are categorised by technology







Search Code Diaries and sister sites Google

Adding HTTP Headers To Requests in Filters and Servlets

Aim
The aim of this tutorial is to demonstrate how you can add Headers to the ServletRequest and HttpServletRequest objects in either servlets or filters. This requires subclassing the HttpServletRequestWrapper class.

Assumptions
This article assumes that you can compile, deploy and test the filter/servlet.  For an example that demonstrates compiling and deploying a filter please go to Complete Java Filter Example. To create a JSP page that will display headers please have a look at JSP Page That Displays All Headers and Parameters.


  1. First let us have a look at subclassing the HttpServletRequestWrapper class. As you can see we have overridden getHeaderNames and getHeader to include our custom headers. These custom header are added through the addHeader function which is a new function. Our custom headers are stored in a hashmap.
     1. package myfilter;
     2. 
     3. import javax.servlet.http.HttpServletRequest;
     4. import javax.servlet.http.HttpServletRequestWrapper;
     5. import java.util.*;
     6. 
     7. public class MyServletRequestWrapper extends HttpServletRequestWrapper{
     8. 
     9.     private Map headerMap;
    10.     
    11.     public void addHeader(String name, String value){
    12.         headerMap.put(name, new String(value));
    13.     }
    14.     
    15.     public MyServletRequestWrapper(HttpServletRequest request){
    16.         super(request);
    17.         headerMap = new HashMap();
    18.     }
    19. 
    20.     public Enumeration getHeaderNames(){
    21.         
    22.         HttpServletRequest request = (HttpServletRequest)getRequest();
    23.         
    24.         List list = new ArrayList();
    25.         
    26.         for( Enumeration e = request.getHeaderNames() ; e.hasMoreElements() ;)
    27.             list.add(e.nextElement().toString());
    28.         
    29.         for( Iterator i = headerMap.keySet().iterator() ; i.hasNext() ;){
    30.             list.add(i.next());
    31.         }
    32.         
    33.         return Collections.enumeration(list);
    34.     }
    35.     
    36.     public String getHeader(String name){
    37.         Object value;
    38.         if((value = headerMap.get(""+name)) != null)
    39.             return value.toString();
    40.         else
    41.             return ((HttpServletRequest)getRequest()).getHeader(name);
    42.         
    43.     }
    44. }
    Hide line numbers

  2. Now let's have a look at a filter that will use this wrapper to add some custom headers. You can observe on line 31 how we use the wrapper to wrap the HttpServletRequest.
     1. package myfilter;
     2. 
     3. import java.io.IOException;
     4. import javax.servlet.*;
     5. import javax.servlet.http.HttpServletRequest;
     6. import javax.servlet.http.HttpServletResponse;
     7. import javax.servlet.http.HttpServletResponseWrapper;
     8. import javax.servlet.http.HttpSession;
     9. 
    10. import java.util.logging.*;
    11. 
    12. 
    13. public class MyFilter implements javax.servlet.Filter {
    14.     private ServletContext servletContext;
    15.     private Logger log;
    16.     
    17.     public MyFilter(){
    18.         super();
    19.     }
    20.     
    21.     public void init(FilterConfig filterConfig) throws ServletException {
    22.         servletContext = filterConfig.getServletContext();
    23.         log = Logger.getLogger(MyFilter.class.getName());
    24.     }
    25. 
    26.     public void doFilter(   ServletRequest req, 
    27.                             ServletResponse res, 
    28.                             FilterChain filterChain)
    29.         throws IOException, ServletException {
    30. 
    31.         MyServletRequestWrapper httpReq    = new MyServletRequestWrapper((HttpServletRequest)req);
    32.         HttpServletResponse    httpRes   = (HttpServletResponse)res;
    33.         
    34.         HttpSession session = httpReq.getSession();
    35. 
    36.         httpReq.addHeader("MY-HEADER-X1", "header 1");
    37.         httpReq.addHeader("MY-HEADER-X2", "header 2");
    38. 
    39.         filterChain.doFilter(httpReq, httpRes);
    40.             
    41.     }
    42. 
    43.     public void destroy(){
    44.     }
    45. 
    46. }
    Hide line numbers

JSP Page that Displays all the Headers and Parameters

Here is a simple page that displays all the header information and parameter names and values using getHeaderNames and getParameterNames;

 1. <%@ page  import="java.util.*" %>
 2. <html>
 3. <head></head>
 4. <body>
 5. 
 6. <h3> Parameter Names </h3>
 7. <%  
 8.     String parameter;
 9.     Enumeration parameterNames;
10.     for( parameterNames = request.getParameterNames() ; parameterNames.hasMoreElements() ; ){
11.         parameter = parameterNames.nextElement().toString();
12.         out.println("[ "+parameter+" ] = "+request.getParameterValues(parameter)[0]+"<br/>");            
13.     }
14. %>
15. 
16. <h3>Header Names</h3>
17. <%  
18.     String header;
19.     Enumeration headerNames;
20.     for( headerNames = request.getHeaderNames() ; headerNames.hasMoreElements() ; ){
21.         header = headerNames.nextElement().toString();
22.         out.println("[ "+header+" ] = "+request.getHeader(header)+"<br/>");            
23.     }
24. %>
25. 
26. </body>
27. </html>
Hide line numbers