Changeset 773:bf439ae8d130
- Timestamp:
- 01/15/12 02:36:22 (4 months ago)
- Branch:
- default
- Location:
- kraken-httpd/src/main/java/org/krakenapps/httpd/impl
- Files:
-
- 2 edited
-
Request.java (modified) (19 diffs)
-
ServletRegistryImpl.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kraken-httpd/src/main/java/org/krakenapps/httpd/impl/Request.java
r772 r773 25 25 import java.nio.charset.Charset; 26 26 import java.security.Principal; 27 import java.util.ArrayList; 27 28 import java.util.Collection; 28 29 import java.util.Collections; … … 33 34 import java.util.Map; 34 35 36 import javax.net.ssl.SSLPeerUnverifiedException; 37 import javax.net.ssl.SSLSession; 35 38 import javax.servlet.AsyncContext; 36 39 import javax.servlet.DispatcherType; … … 52 55 import org.jboss.netty.handler.codec.http.HttpMethod; 53 56 import org.jboss.netty.handler.codec.http.HttpRequest; 57 import org.jboss.netty.handler.ssl.SslHandler; 54 58 import org.slf4j.Logger; 55 59 import org.slf4j.LoggerFactory; … … 57 61 @SuppressWarnings("rawtypes") 58 62 public class Request implements HttpServletRequest { 63 private final String contextPath = ""; 59 64 private ChannelHandlerContext ctx; 65 private boolean secure; 60 66 private HttpRequest req; 61 67 private String servletPath; … … 64 70 private ServletInputStream is; 65 71 private Map<String, Object> attributes = new HashMap<String, Object>(); 66 private Map<String, String> parameters = new HashMap<String, String>();72 private Map<String, List<String>> parameters = new HashMap<String, List<String>>(); 67 73 private Cookie[] cookies; 74 private List<Locale> locales = new ArrayList<Locale>(); 68 75 private Logger logger = LoggerFactory.getLogger(this.getClass().getName()); 69 76 … … 74 81 this.pathInfo = pathInfo; 75 82 this.queryString = ""; 83 84 SslHandler sslHandler = (SslHandler) ctx.getPipeline().get("ssl"); 85 this.secure = sslHandler != null; 86 if (secure) { 87 SSLSession session = sslHandler.getEngine().getSession(); 88 String cipherSuite = session.getCipherSuite(); 89 try { 90 setAttribute("javax.servlet.request.X509Certificate", session.getPeerCertificateChain()); 91 } catch (SSLPeerUnverifiedException e) { 92 } 93 94 setAttribute("javax.servlet.request.cipher_suite", cipherSuite); 95 setAttribute("javax.servlet.request.key_size", deduceKeyLength(cipherSuite)); 96 } 76 97 77 98 ChannelBuffer content = req.getContent(); … … 111 132 } 112 133 134 List<String> langs = req.getHeaders(HttpHeaders.Names.ACCEPT_LANGUAGE); 135 if (langs != null) 136 for (String lang : langs) 137 locales.add(new Locale(lang)); 138 139 // see servlet spec section 3.9 140 if (langs.size() == 0) 141 locales.add(Locale.getDefault()); 142 113 143 setAttribute("netty.channel", ctx.getChannel()); 144 } 145 146 private int deduceKeyLength(String cipherSuite) { 147 if (cipherSuite.equals("IDEA_CBC")) 148 return 128; 149 if (cipherSuite.equals("RC2_CBC_40")) 150 return 40; 151 if (cipherSuite.equals("RC4_40")) 152 return 40; 153 if (cipherSuite.equals("RC4_128")) 154 return 128; 155 if (cipherSuite.equals("DES40_CBC")) 156 return 40; 157 if (cipherSuite.equals("DES_CBC")) 158 return 56; 159 if (cipherSuite.equals("3DES_EDE_CBC")) 160 return 168; 161 return 0; 114 162 } 115 163 … … 127 175 value = null; 128 176 129 parameters.put(name, value); 177 List<String> values = new ArrayList<String>(); 178 if (!parameters.containsKey(name)) 179 parameters.put(name, values); 180 else 181 values = parameters.get(name); 182 183 values.add(value); 130 184 logger.trace("kraken webconsole: param name [{}], value [{}]", name, value); 131 185 } else { … … 150 204 151 205 @Override 206 public boolean isSecure() { 207 return secure; 208 } 209 210 // TODO: parse should be deferred for character encoding support 211 @Override 212 public void setCharacterEncoding(String env) throws UnsupportedEncodingException { 213 } 214 215 @Override 152 216 public Object getAttribute(String name) { 153 217 return attributes.get(name); 154 218 } 155 219 220 @SuppressWarnings("unchecked") 156 221 @Override 157 222 public Enumeration getAttributeNames() { 158 223 return Collections.enumeration(attributes.keySet()); 224 } 225 226 @Override 227 public void setAttribute(String name, Object o) { 228 attributes.put(name, o); 229 } 230 231 @Override 232 public void removeAttribute(String name) { 233 attributes.remove(name); 159 234 } 160 235 … … 188 263 @Override 189 264 public String getParameter(String name) { 190 return parameters.get(name); 191 } 192 265 String[] values = getParameterValues(name); 266 if (values == null || values.length == 0) 267 return null; 268 return values[0]; 269 } 270 271 @Override 272 public Map<String, String[]> getParameterMap() { 273 Map<String, String[]> m = new HashMap<String, String[]>(); 274 for (String key : parameters.keySet()) 275 m.put(key, (String[]) parameters.get(key).toArray()); 276 return m; 277 } 278 279 @SuppressWarnings("unchecked") 193 280 @Override 194 281 public Enumeration getParameterNames() { … … 198 285 @Override 199 286 public String[] getParameterValues(String name) { 200 return (String[]) parameters.values().toArray(); 287 List<String> values = parameters.get(name); 288 if (values == null) 289 return null; 290 291 return (String[]) values.toArray(); 201 292 } 202 293 … … 215 306 public String getRealPath(String path) { 216 307 return null; 308 } 309 310 @Override 311 public String getLocalName() { 312 return null; 313 } 314 315 @Override 316 public String getLocalAddr() { 317 return ((InetSocketAddress) ctx.getChannel().getLocalAddress()).getAddress().getHostAddress(); 318 } 319 320 @Override 321 public int getLocalPort() { 322 return ((InetSocketAddress) ctx.getChannel().getLocalAddress()).getPort(); 217 323 } 218 324 … … 258 364 259 365 @Override 260 public void setAttribute(String name, Object o) {261 attributes.put(name, o);262 }263 264 @Override265 366 public String getAuthType() { 266 367 String auth = req.getHeader(HttpHeaders.Names.AUTHORIZATION); … … 275 376 } 276 377 378 @SuppressWarnings("unchecked") 379 @Override 380 public Enumeration getHeaderNames() { 381 return Collections.enumeration(req.getHeaderNames()); 382 } 383 384 @Override 385 public String getHeader(String name) { 386 return req.getHeader(name); 387 } 388 389 @Override 390 public Enumeration<String> getHeaders(String name) { 391 return Collections.enumeration(req.getHeaders(name)); 392 } 393 277 394 @Override 278 395 public long getDateHeader(String name) { 279 396 try { 280 long value = Long.parseLong(req.getHeader(name)); 281 return value; 397 return Long.parseLong(req.getHeader(name)); 282 398 } catch (NumberFormatException e) { 283 return -1; 284 } 285 } 286 287 @Override 288 public String getHeader(String name) { 289 return req.getHeader(name); 290 } 291 292 @Override 293 public Enumeration getHeaderNames() { 294 return Collections.enumeration(req.getHeaderNames()); 399 throw new IllegalArgumentException(e); 400 } 295 401 } 296 402 … … 306 412 307 413 @Override 414 public String getQueryString() { 415 return queryString; 416 } 417 418 @Override 419 public String getRemoteUser() { 420 return null; 421 } 422 423 @Override 424 public String getRequestURI() { 425 return contextPath + servletPath + pathInfo; 426 } 427 428 @Override 429 public String getRequestedSessionId() { 430 // TODO Auto-generated method stub 431 return null; 432 } 433 434 @Override 435 public String getContextPath() { 436 return contextPath; 437 } 438 439 @Override 440 public String getServletPath() { 441 return servletPath; 442 } 443 444 @Override 308 445 public String getPathInfo() { 309 446 return pathInfo; … … 316 453 @Override 317 454 public String getPathTranslated() { 318 // TODO Auto-generated method stub 319 return null; 320 } 321 322 @Override 323 public String getQueryString() { 324 return queryString; 325 } 326 327 @Override 328 public String getRemoteUser() { 329 return null; 330 } 331 332 @Override 333 public String getRequestURI() { 334 return servletPath + pathInfo; 335 } 336 337 @Override 338 public String getRequestedSessionId() { 339 // TODO Auto-generated method stub 340 return null; 341 } 342 343 @Override 344 public String getServletPath() { 345 return servletPath; 455 // it must return null if local file system path cannot be determined 456 return null; 457 } 458 459 @Override 460 public Enumeration<Locale> getLocales() { 461 return Collections.enumeration(locales); 462 } 463 464 @Override 465 public Locale getLocale() { 466 return locales.get(0); 346 467 } 347 468 … … 381 502 382 503 @Override 383 public void setCharacterEncoding(String env) throws UnsupportedEncodingException {384 // TODO Auto-generated method stub385 386 }387 388 @Override389 public Map<String, String[]> getParameterMap() {390 // TODO Auto-generated method stub391 return null;392 }393 394 @Override395 public void removeAttribute(String name) {396 // TODO Auto-generated method stub397 398 }399 400 @Override401 public Locale getLocale() {402 // TODO Auto-generated method stub403 return null;404 }405 406 @Override407 public Enumeration<Locale> getLocales() {408 // TODO Auto-generated method stub409 return null;410 }411 412 @Override413 public boolean isSecure() {414 // TODO Auto-generated method stub415 return false;416 }417 418 @Override419 504 public RequestDispatcher getRequestDispatcher(String path) { 420 505 // TODO Auto-generated method stub … … 423 508 424 509 @Override 425 public String getLocalName() {426 // TODO Auto-generated method stub427 return null;428 }429 430 @Override431 public String getLocalAddr() {432 // TODO Auto-generated method stub433 return null;434 }435 436 @Override437 public int getLocalPort() {438 // TODO Auto-generated method stub439 return 0;440 }441 442 @Override443 510 public ServletContext getServletContext() { 444 // TODO Auto-generated method stub445 511 return null; 446 512 } … … 483 549 484 550 @Override 485 public Enumeration<String> getHeaders(String name) {486 // TODO Auto-generated method stub487 return null;488 }489 490 @Override491 public String getContextPath() {492 // TODO Auto-generated method stub493 return null;494 }495 496 @Override497 551 public boolean isUserInRole(String role) { 498 552 // TODO Auto-generated method stub -
kraken-httpd/src/main/java/org/krakenapps/httpd/impl/ServletRegistryImpl.java
r769 r773 71 71 prefix = dir; 72 72 73 // TODO: For now, it does not comply with servlet spec. see section 3.5 73 74 // longest match 74 75 for (int i = 0; i < tokens.length; i++) {
Note: See TracChangeset
for help on using the changeset viewer.
