Newer
Older
alarm / src / com / casic / core / util / ServletUtils.java
zhout on 2 Mar 2022 4 KB first commit
 package com.casic.core.util;

 import org.springframework.util.Assert;

 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.UnsupportedEncodingException;
 import java.util.Enumeration;
 import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.TreeMap;

 public class ServletUtils
 {
   public static final String TEXT_TYPE = "text/plain";
   public static final String JSON_TYPE = "application/json";
   public static final String XML_TYPE = "text/xml";
   public static final String HTML_TYPE = "text/html";
   public static final String JS_TYPE = "text/javascript";
   public static final String EXCEL_TYPE = "application/vnd.ms-excel";
   public static final String AUTHENTICATION_HEADER = "Authorization";
   public static final long ONE_YEAR_SECONDS = 31536000L;
   public static final int MILL_SECONDS = 1000;
 
   public static void setExpiresHeader(HttpServletResponse response, long expiresSeconds)
   {
     response.setDateHeader("Expires", System.currentTimeMillis() + expiresSeconds * 1000L);
 
     response.setHeader("Cache-Control", "private, max-age=" + expiresSeconds);
   }
 
   public static void setDisableCacheHeader(HttpServletResponse response)
   {
     response.setDateHeader("Expires", 1L);
     response.addHeader("Pragma", "no-cache");
 
     response.setHeader("Cache-Control", "no-cache, no-store, max-age=0");
   }
 
   public static void setLastModifiedHeader(HttpServletResponse response, long lastModifiedDate)
   {
     response.setDateHeader("Last-Modified", lastModifiedDate);
   }
 
   public static void setEtag(HttpServletResponse response, String etag)
   {
     response.setHeader("ETag", etag);
   }
 
   public static boolean checkIfModifiedSince(HttpServletRequest request, HttpServletResponse response, long lastModified)
   {
     long ifModifiedSince = request.getDateHeader("If-Modified-Since");
 
     if ((ifModifiedSince != -1L) && (lastModified < ifModifiedSince + 1000L))
     {
       response.setStatus(304);
 
       return false;
     }
 
     return true;
   }
 
   public static boolean checkIfNoneMatchEtag(HttpServletRequest request, HttpServletResponse response, String etag)
   {
     String headerValue = request.getHeader("If-None-Match");
 
     if (headerValue != null) {
       boolean conditionSatisfied = false;
 
       if (!"*".equals(headerValue)) {
         StringTokenizer commaTokenizer = new StringTokenizer(headerValue, ",");
 
         while ((!conditionSatisfied) && (commaTokenizer.hasMoreTokens())) {
           String currentToken = commaTokenizer.nextToken();
 
           if (currentToken.trim().equals(etag))
             conditionSatisfied = true;
         }
       }
       else {
         conditionSatisfied = true;
       }
 
       if (conditionSatisfied) {
         response.setStatus(304);
         response.setHeader("ETag", etag);
 
         return false;
       }
     }
 
     return true;
   }
 
   public static void setFileDownloadHeader(HttpServletResponse response, String fileName)
   {
     try
     {
       String encodedfileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
 
       response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\"");
     }
     catch (UnsupportedEncodingException e) {
       throw new IllegalArgumentException("cannot set download file name", e);
     }
   }
 
   public static Map<String, Object> getParametersStartingWith(ServletRequest request, String prefix)
   {
     Assert.notNull(request, "Request must not be null");
 
     Enumeration paramNames = request.getParameterNames();
     Map params = new TreeMap();
 
     String thePrefix = prefix == null ? "" : prefix;
 
     while ((paramNames != null) && (paramNames.hasMoreElements())) {
       String paramName = (String)paramNames.nextElement();
 
       if (("".equals(thePrefix)) || (paramName.startsWith(thePrefix))) {
         String unprefixed = paramName.substring(thePrefix.length());
         String[] values = request.getParameterValues(paramName);
 
         if ((values != null) && (values.length != 0))
         {
           if (values.length > 1)
             params.put(unprefixed, values);
           else {
             params.put(unprefixed, values[0]);
           }
         }
       }
     }
     return params;
   }
 
   public static String encodeHttpBasic(String userName, String password)
   {
     try
     {
       String encode = userName + ":" + password;
 
       return "Basic " + EncodeUtils.base64Encode(encode.getBytes("UTF-8"));
     }
     catch (UnsupportedEncodingException e) {
       throw new IllegalArgumentException("cannot encode http basic", e);
     }
   }
 }