001package org.fbsql.servlet; 002 003import static org.fbsql.servlet.StringUtils.q; 004 005import java.sql.SQLException; 006import java.util.Base64; 007import java.util.Enumeration; 008 009import javax.servlet.http.Cookie; 010import javax.servlet.http.HttpServletRequest; 011import javax.servlet.http.HttpSession; 012 013public class HttpRequestUtils { 014 015 /** 016 * Converts HTTP headers to JSON-formatted string 017 * 018 * @param request 019 * @return 020 */ 021 public static CharSequence getHttpHeadersJson(HttpServletRequest request) { 022 StringBuilder sb = new StringBuilder(); 023 boolean first = true; 024 sb.append('{'); 025 for (Enumeration<String> e = request.getHeaderNames(); e.hasMoreElements();) { 026 String header = e.nextElement(); 027 String value = request.getHeader(header); 028 if (first) 029 first = false; 030 else 031 sb.append(','); 032 sb.append(q(header) + ':' + q(value)); 033 } 034 sb.append('}'); 035 return sb; 036 } 037 038 /** 039 * Converts cookies array to JSON-formatted string 040 * 041 * @param request 042 * @return 043 */ 044 public static CharSequence getCookiesJson(Cookie[] cookies) { 045 if (cookies == null) 046 return "[]"; 047 StringBuilder sb = new StringBuilder(); 048 sb.append('['); 049 for (int i = 0; i < cookies.length; i++) { 050 if (i != 0) 051 sb.append(','); 052 Cookie cookie = cookies[i]; 053 sb.append("{"); 054 sb.append(q("name")).append(':').append(cookie.getName() == null ? "null" : q(cookie.getName())).append(','); 055 sb.append(q("value")).append(':').append(cookie.getValue() == null ? "null" : q(cookie.getValue())); 056 sb.append("}"); 057 } 058 sb.append(']'); 059 return sb; 060 } 061 062 /** 063 * Converts session attributes to JSON-formatted string 064 * 065 * @param request 066 * @param encoder 067 * @return 068 * @throws SQLException 069 */ 070 public static CharSequence generateSessionInfoJson(HttpServletRequest request, Base64.Encoder encoder) throws SQLException { 071 HttpSession session = request.getSession(false); 072 String sessionId = session.getId(); 073 long sessionCreationTime = session.getCreationTime(); 074 long sessionLastAccessedTime = session.getLastAccessedTime(); 075 076 final char COLON = ':'; 077 final char COMMA = ','; 078 079 Enumeration<String> attributeNames = session.getAttributeNames(); 080 StringBuilder sb = new StringBuilder(); 081 sb.append('{'); 082 sb.append(q("id")).append(COLON).append(q(sessionId)).append(COMMA); 083 sb.append(q("creationTime")).append(COLON).append(Long.toString(sessionCreationTime)).append(COMMA); 084 sb.append(q("lastAccessedTime")).append(COLON).append(Long.toString(sessionLastAccessedTime)).append(COMMA); 085 sb.append(q("attributes")).append(COLON); 086 sb.append('{'); 087 boolean first = true; 088 while (attributeNames.hasMoreElements()) { 089 String name = attributeNames.nextElement(); 090 Object value = session.getAttribute(name); 091 String svalue = QueryUtils.valueToJsonString(value, encoder); 092 if (first) 093 first = false; 094 else 095 sb.append(COMMA); 096 sb.append(q(name) + COLON + svalue); 097 } 098 sb.append('}'); 099 sb.append('}'); 100 return sb; 101 } 102 103}