1 3 package jodd.servlet; 4 5 import java.io.IOException ; 6 import java.util.Enumeration ; 7 import java.util.HashMap ; 8 import java.util.Iterator ; 9 import java.util.Map ; 10 11 import javax.servlet.ServletRequest ; 12 import javax.servlet.jsp.PageContext ; 13 import javax.servlet.http.Cookie ; 14 import javax.servlet.http.HttpServletRequest ; 15 import javax.servlet.http.HttpServletResponse ; 16 import javax.servlet.http.HttpSession ; 17 18 import jodd.util.Base64; 19 20 23 public class ServletUtil { 24 25 26 28 31 public static boolean isMultipartRequest(HttpServletRequest request) { 32 String type = request.getHeader("Content-Type"); 33 return (type != null) && type.startsWith("multipart/form-data"); 34 } 35 36 40 public static void setBrowserVary(HttpServletResponse response) { 41 response.setHeader( "Vary", "User-Agent"); 42 } 43 44 45 50 public static String getAuthUsername(HttpServletRequest request) { 51 String header = request.getHeader("Authorization"); 52 if (header == null) { 53 return null; 54 } 55 String encoded = header.substring(header.indexOf(' ') + 1); 56 String decoded = new String (Base64.decode(encoded)); 57 return decoded.substring(0, decoded.indexOf(':')); 58 } 59 60 64 public static String getAuthPassword(HttpServletRequest request) { 65 String header = request.getHeader("Authorization"); 66 if (header == null) { 67 return null; 68 } 69 String encoded = header.substring(header.indexOf(' ') + 1); 70 String decoded = new String (Base64.decode(encoded)); 71 return decoded.substring(decoded.indexOf(':') +1); 72 } 73 74 77 public static void requireAuthentication(HttpServletResponse resp, String realm) throws IOException { 78 resp.setHeader("WWW-Authenticate", "Basic realm=\"" + realm + '\"'); 79 resp.sendError(HttpServletResponse.SC_UNAUTHORIZED); 80 } 81 82 83 85 90 public static Cookie getCookie(HttpServletRequest request, String cookieName) { 91 Cookie [] cookies = request.getCookies(); 92 if (cookies != null) { 93 Cookie cookie; 94 for (int i = 0; i < cookies.length; i++) { 95 cookie = cookies[i]; 96 if (cookie.getName().equals(cookieName)) { 97 return cookie; 98 } 99 } 100 } 101 return null; 102 } 103 104 105 107 108 111 public static Object getRequestParameter(ServletRequest request, String name) { 112 String [] values = request.getParameterValues(name); 113 if (values == null) { 114 return null; 115 } 116 if (values.length == 1) { 117 return values[0]; 118 } 119 return values; 120 } 121 122 123 126 public static void setRequestAttributes(ServletRequest request, Map attributes) { 127 Iterator iterator = attributes.keySet().iterator(); 128 while (iterator.hasNext()) { 129 String key = (String ) iterator.next(); 130 request.setAttribute(key, attributes.get(key)); 131 } 132 } 133 134 137 public static Map getRequestAttributes(ServletRequest request) { 138 Map map = new HashMap (); 139 loadRequestAttributes(map, request); 140 return map; 141 } 142 143 public static void loadRequestAttributes(Map map, ServletRequest request) { 144 Enumeration names = request.getAttributeNames(); 145 while (names.hasMoreElements()) { 146 String name = (String ) names.nextElement(); 147 map.put(name, request.getAttribute(name)); 148 } 149 } 150 151 156 public static Map getRequestParameters(ServletRequest request) { 157 Map map = new HashMap (); 158 loadRequestParameters(map, request); 159 return map; 160 } 161 162 public static void loadRequestParameters(Map map, ServletRequest request) { 163 Enumeration names = request.getParameterNames(); 164 while (names.hasMoreElements()) { 165 String name = (String ) names.nextElement(); 166 map.put(name, getRequestParameter(request, name)); 167 } 168 } 169 170 173 public static void loadSessionAttributes(Map destination, HttpSession session) { 174 Enumeration names = session.getAttributeNames(); 175 while (names.hasMoreElements()) { 176 String name = (String ) names.nextElement(); 177 destination.put(name, session.getAttribute(name)); 178 } 179 } 180 181 public static Map getSessionAttributes(HttpSession session) { 182 Map map = new HashMap (); 183 loadSessionAttributes(map, session); 184 return map; 185 } 186 187 public static void setSessionAttributes(HttpSession session, Map attributes) { 188 Iterator iterator = attributes.keySet().iterator(); 189 while (iterator.hasNext()) { 190 String key = (String ) iterator.next(); 191 session.setAttribute(key, attributes.get(key)); 192 } 193 } 194 195 196 198 202 public static Object getAttributeValue(HttpServletRequest request, String name, PageContext page) { 203 Object value; 204 if (page != null) { 205 value = page.getAttribute(name); 206 if (value != null) { 207 return value; 208 } 209 } 210 value = request.getAttribute(name); 211 if (value != null) { 212 return value; 213 } 214 value = request.getSession().getAttribute(name); 215 if (value != null) { 216 return value; 217 } 218 value = request.getSession().getServletContext().getAttribute(name); 219 return value; 220 } 221 222 public static Object getAttributeValue(HttpServletRequest request, String name) { 223 return getAttributeValue(request, name, null); 224 } 225 226 230 public static Object getValue(HttpServletRequest request, String name, PageContext page) { 231 Object value; 232 if (page != null) { 233 value = page.getAttribute(name); 234 if (value != null) { 235 return value; 236 } 237 } 238 value = request.getAttribute(name); 239 if (value != null) { 240 return value; 241 } 242 value = request.getParameter(name); 243 if (value != null) { 244 return value; 245 } 246 value = request.getSession().getAttribute(name); 247 if (value != null) { 248 return value; 249 } 250 value = request.getSession().getServletContext().getAttribute(name); 251 return value; 252 } 253 254 public static Object getValue(HttpServletRequest request, String name) { 255 return getValue(request, name, null); 256 } 257 258 259 261 262 265 public static final String VALID_SCHEME_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+.-"; 266 267 270 public static boolean isAbsoluteUrl(String url) { 271 if (url == null) { return false; 273 } 274 int colonPos; if ((colonPos = url.indexOf(':')) == -1) { 276 return false; 277 } 278 279 for (int i = 0; i < colonPos; i++) { 282 if (VALID_SCHEME_CHARS.indexOf(url.charAt(i)) == -1) { 283 return false; 284 } 285 } 286 return true; 287 } 288 289 295 public static String stripSession(String url) { 296 StringBuffer u = new StringBuffer (url); 297 int sessionStart; 298 while ((sessionStart = u.toString().indexOf(";jsessionid=")) != -1) { 299 int sessionEnd = u.toString().indexOf(';', sessionStart + 1); 300 if (sessionEnd == -1) { 301 sessionEnd = u.toString().indexOf('?', sessionStart + 1); 302 } 303 if (sessionEnd == -1) { 304 sessionEnd = u.length(); 305 } 306 u.delete(sessionStart, sessionEnd); 307 } 308 return u.toString(); 309 } 310 311 public static String resolveUrl(String url, PageContext pageContext) { 312 return resolveUrl(url, (HttpServletRequest ) pageContext.getRequest()); 313 } 314 315 public static String resolveUrl(String url, HttpServletRequest request) { 316 if (isAbsoluteUrl(url)) { 317 return url; 318 } 319 if (url.startsWith("/")) { 320 return (request.getContextPath() + url); 321 } else { 322 return url; 323 } 324 } 325 326 public static String resolveUrl(String url, String context) { 327 if (isAbsoluteUrl(url)) { 328 return url; 329 } 330 if (!context.startsWith("/") || !url.startsWith("/")) { 331 throw new IllegalArgumentException ("Values of both 'context' and 'url' must start with '/'."); 332 } 333 if (context.equals("/")) { 334 return url; 335 } else { 336 return (context + url); 337 } 338 } 339 340 341 343 347 public static String debug(HttpServletRequest request) { 348 return debug(request, null); 349 } 350 351 354 public static String debug(HttpServletRequest request, PageContext page) { 355 StringBuffer result = new StringBuffer (); 356 result.append("\nPARAMETERS\n----------\n"); 357 Enumeration enumeration = request.getParameterNames(); 358 while (enumeration.hasMoreElements()) { 359 String name = (String ) enumeration.nextElement(); 360 Object [] value = request.getParameterValues(name); 361 result.append(name).append('='); 362 if (value == null) { 363 result.append("<null>"); 364 } else if (value.length == 1) { 365 result.append('[').append(value[0]).append("]\n"); 366 } else { 367 result.append('[').append(value).append("]\n"); 368 } 369 } 370 371 loop: 372 for (int i = 0; i < 4; i++) { 373 switch (i) { 374 case 0: result.append("\nREQUEST\n--------\n"); 375 enumeration = request.getAttributeNames(); 376 break; 377 case 1: result.append("\nSESSION\n--------\n"); 378 enumeration = request.getSession().getAttributeNames(); 379 break; 380 case 2: result.append("\nAPPLICATION\n-----------\n"); 381 enumeration = request.getSession().getServletContext().getAttributeNames(); 382 break; 383 case 3: if (page == null) { 384 break loop; 385 } 386 result.append("\nPAGE\n-----------\n"); 387 enumeration = page.getAttributeNamesInScope(PageContext.PAGE_SCOPE); 388 } 389 while (enumeration.hasMoreElements()) { 390 String name = (String ) enumeration.nextElement(); 391 Object value = request.getAttribute(name); 392 result.append(name).append('='); 393 if (value == null) { 394 result.append("<null>\n"); 395 } else { 396 result.append('[').append(value).append("]\n"); 397 } 398 } 399 } 400 return result.toString(); 401 } 402 403 } 404 | Popular Tags |