HttpServletTransportRequestContext.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.utils.transport.http;

  21. import java.net.URLDecoder;
  22. import java.util.ArrayList;
  23. import java.util.Enumeration;
  24. import java.util.HashMap;
  25. import java.util.List;

  26. import javax.servlet.http.Cookie;
  27. import javax.servlet.http.HttpServletRequest;

  28. import org.openspcoop2.utils.UtilsException;
  29. import org.openspcoop2.utils.resources.Charset;
  30. import org.openspcoop2.utils.transport.Credential;
  31. import org.slf4j.Logger;

  32. /**
  33.  * URL Protocol Context
  34.  *
  35.  * @author Poli Andrea (apoli@link.it)
  36.  * @author $Author$
  37.  * @version $Rev$, $Date$
  38.  */


  39. public class HttpServletTransportRequestContext extends org.openspcoop2.utils.transport.TransportRequestContext implements java.io.Serializable {

  40.     // Senno se l'oggetto non e' serializzabile
  41.     private transient HttpServletRequest httpServletRequest;
  42.    
  43.     public HttpServletRequest getHttpServletRequest() {
  44.         return this.httpServletRequest;
  45.     }
  46.     public void updateHttpServletRequest(HttpServletRequest httpServletRequest) {
  47.         this.httpServletRequest = httpServletRequest;
  48.     }
  49.    

  50.     /**
  51.      *
  52.      */
  53.     private static final long serialVersionUID = 1L;
  54.        
  55.     public HttpServletTransportRequestContext() throws UtilsException{
  56.         super();
  57.     }
  58.     public HttpServletTransportRequestContext(Logger log) throws UtilsException{
  59.         super(log);
  60.     }
  61.     public HttpServletTransportRequestContext(HttpServletRequest req,Logger logCore) throws UtilsException{
  62.         this(req,logCore,false);
  63.     }
  64.     public HttpServletTransportRequestContext(HttpServletRequest req,Logger logCore, boolean debug) throws UtilsException{
  65.         super(logCore);
  66.        
  67.         try {
  68.            
  69.             this.httpServletRequest = req;
  70.            
  71.             // Properties FORM Based
  72.             this.parameters = new HashMap<>();        
  73.             java.util.Enumeration<?> en = req.getParameterNames();
  74.             while(en.hasMoreElements()){
  75.                 String nomeProperty = (String)en.nextElement();
  76.                 String [] s = req.getParameterValues(nomeProperty);
  77.                 List<String> values = new ArrayList<>();
  78.                 if(s!=null && s.length>0) {
  79.                     for (int i = 0; i < s.length; i++) {
  80.                         String value = s[i];
  81.                         values.add(value);
  82.                         //logCore.info("Parameter ["+nomeProperty+"] valore-"+i+" ["+value+"]");
  83.                     }
  84.                 }
  85.                 else {
  86.                     //logCore.info("Parameter ["+nomeProperty+"] valore ["+req.getParameter(nomeProperty)+"]");
  87.                     values.add(req.getParameter(nomeProperty));
  88.                 }
  89.                 this.parameters.put(nomeProperty,values);
  90.             }

  91.             // Hedear Trasporto
  92.             this.headers = new HashMap<>();        
  93.             java.util.Enumeration<?> enTrasporto = req.getHeaderNames();
  94.             while(enTrasporto.hasMoreElements()){
  95.                 String nomeHeader = (String)enTrasporto.nextElement();
  96.                 Enumeration<String> enValues = req.getHeaders(nomeHeader);
  97.                 List<String> values = new ArrayList<>();
  98.                 if(enValues!=null) {
  99.                     @SuppressWarnings("unused")
  100.                     int i = 0;
  101.                     while (enValues.hasMoreElements()) {
  102.                         String value = (String) enValues.nextElement();
  103.                         values.add(value);
  104.                         //logCore.info("Header ["+nomeHeader+"] valore-"+i+" ["+value+"]");
  105.                         i++;
  106.                     }
  107.                 }
  108.                 if(values.isEmpty()) {
  109.                     //logCore.info("Header ["+nomeHeader+"] valore ["+req.getHeader(nomeHeader)+"]");
  110.                     values.add(req.getHeader(nomeHeader));
  111.                 }
  112.                 this.headers.put(nomeHeader,values);
  113.             }
  114.            
  115.             // Cookies
  116.             this.cookiesValue = new HashMap<>();
  117.             this.cookiesMaxAge = new HashMap<String, Integer>();
  118.             Cookie [] cookies = req.getCookies();
  119.             if(cookies!=null && cookies.length>0) {
  120.                 for (Cookie cookie : cookies) {
  121.                     String cookieName = cookie.getName();
  122.                     String value = URLDecoder.decode(cookie.getValue(), Charset.UTF_8.getValue());
  123.                     this.cookiesValue.put(cookieName,value);
  124.                     if(cookie.getMaxAge()>0) {
  125.                         this.cookiesMaxAge.put(cookieName, cookie.getMaxAge());
  126.                     }
  127.                 }
  128.             }
  129.            
  130.             this.webContext = req.getContextPath();
  131.             this.requestURI = req.getRequestURI();
  132.             this.requestType = req.getMethod();
  133.            
  134.             this.credential = new HttpServletCredential(req,logCore,debug);
  135.            
  136.             this.source = buildSource(req, this.credential);
  137.            
  138.         }catch(Exception e){
  139.             throw new UtilsException(e.getMessage(),e);
  140.         }
  141.     }
  142.    
  143.     public static String buildSource(HttpServletRequest req, Credential credenziali){
  144.         String protocollo = "http";
  145.         if(credenziali.getSubject()!=null)
  146.             protocollo = "https";
  147.         String ip = req.getRemoteAddr();
  148.         String port = ""+req.getRemotePort();
  149.         String user = "";
  150.         if(credenziali.getUsername()!=null || credenziali.getSubject()!=null){
  151.             user = HttpConstants.SEPARATOR_SOURCE;
  152.             if(credenziali.getSubject()!=null)
  153.                 user=user+credenziali.getSubject();
  154.             else
  155.                 user=user+credenziali.getUsername();
  156.         }
  157.         return protocollo+HttpConstants.SEPARATOR_SOURCE+
  158.                 ip+HttpConstants.SEPARATOR_SOURCE+port+user;
  159.     }
  160.    

  161.     @Override
  162.     public String toString() {
  163.         return this.toString("");
  164.     }
  165.     @Override
  166.     public String toString(String prefix) {
  167.         StringBuilder sb = new StringBuilder(super.toString(prefix));
  168.         if(this.httpServletRequest!=null) {
  169.             sb.append("\n").append(prefix).append("httpServletRequest: disponibile");
  170.             if(this.httpServletRequest.getRequestURI()!=null) {
  171.                 sb.append("\n").append(prefix).append("httpServletRequest.getRequestURI: ").append(this.httpServletRequest.getRequestURI());
  172.             }
  173.             if(this.httpServletRequest.getRequestURL()!=null) {
  174.                 sb.append("\n").append(prefix).append("httpServletRequest.getRequestURL: ").append(this.httpServletRequest.getRequestURL());
  175.             }
  176.             if(this.httpServletRequest.getQueryString()!=null) {
  177.                 sb.append("\n").append(prefix).append("httpServletRequest.getQueryString: ").append(this.httpServletRequest.getQueryString());
  178.             }
  179.         }
  180.         return sb.toString();
  181.     }
  182. }