Mercurial > dive4elements > river
comparison flys-client/src/main/java/org/dive4elements/river/client/server/ProxyServlet.java @ 5834:f507086aa94b
Repaired internal references.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:31:32 +0200 |
parents | flys-client/src/main/java/de/intevation/flys/client/server/ProxyServlet.java@92239b53823f |
children | 821a02bbfb4e |
comparison
equal
deleted
inserted
replaced
5833:a2bdc0f524e8 | 5834:f507086aa94b |
---|---|
1 package de.intevation.flys.client.server; | |
2 | |
3 import java.io.InputStream; | |
4 import java.io.IOException; | |
5 import java.io.OutputStream; | |
6 import java.util.Enumeration; | |
7 | |
8 import javax.servlet.ServletConfig; | |
9 import javax.servlet.http.HttpServlet; | |
10 import javax.servlet.http.HttpServletRequest; | |
11 import javax.servlet.http.HttpServletResponse; | |
12 import javax.servlet.http.HttpSession; | |
13 | |
14 import org.apache.http.Header; | |
15 import org.apache.http.HttpEntity; | |
16 import org.apache.http.HttpResponse; | |
17 import org.apache.http.StatusLine; | |
18 import org.apache.http.client.HttpClient; | |
19 import org.apache.http.client.methods.HttpGet; | |
20 import org.apache.http.impl.client.DefaultHttpClient; | |
21 | |
22 import org.apache.log4j.Logger; | |
23 | |
24 import de.intevation.flys.client.server.auth.User; | |
25 | |
26 /** | |
27 * Implements a Proxy for HTTP Requests | |
28 */ | |
29 public class ProxyServlet | |
30 extends HttpServlet | |
31 { | |
32 private static Logger logger = Logger.getLogger(ProxyServlet.class); | |
33 private String remoteurl; | |
34 | |
35 @Override | |
36 public void init(ServletConfig config) { | |
37 this.remoteurl = config.getInitParameter("remoteurl"); | |
38 } | |
39 | |
40 @Override | |
41 public void doPost(HttpServletRequest req, HttpServletResponse resp) { | |
42 } | |
43 | |
44 @Override | |
45 public void doGet(HttpServletRequest req, HttpServletResponse resp) | |
46 throws IOException { | |
47 HttpClient httpclient = new DefaultHttpClient(); | |
48 | |
49 String requesturi = req.getRequestURI(); | |
50 String query = req.getQueryString(); | |
51 | |
52 HttpGet httpget = new HttpGet(this.remoteurl + "?" + query); | |
53 | |
54 boolean debug = logger.isDebugEnabled(); | |
55 | |
56 for (Enumeration e = req.getHeaderNames(); e.hasMoreElements();) { | |
57 String name = (String)e.nextElement(); | |
58 for (Enumeration f = req.getHeaders(name); f.hasMoreElements();) { | |
59 String value = (String)f.nextElement(); | |
60 if (debug) { | |
61 logger.debug( | |
62 "Adding request header " + name + " : " + value); | |
63 } | |
64 httpget.addHeader(name, value); | |
65 } | |
66 } | |
67 | |
68 HttpResponse response = httpclient.execute(httpget); | |
69 | |
70 StatusLine statusline = response.getStatusLine(); | |
71 if (debug) { | |
72 logger.debug("Response statuscode " + statusline.getStatusCode()); | |
73 } | |
74 resp.setStatus(statusline.getStatusCode()); | |
75 | |
76 Header[] headers = response.getAllHeaders(); | |
77 for(Header header : headers) { | |
78 if (debug) { | |
79 logger.debug( | |
80 "Adding response header " + header.getName() + | |
81 " : " + header.getValue()); | |
82 } | |
83 resp.setHeader(header.getName(), header.getValue()); | |
84 } | |
85 | |
86 HttpEntity entity = response.getEntity(); | |
87 if (entity != null) { | |
88 InputStream instream = entity.getContent(); | |
89 byte [] buf = new byte[4096]; | |
90 try { | |
91 OutputStream outstream = resp.getOutputStream(); | |
92 try { | |
93 int read; | |
94 while ((read = instream.read(buf)) >= 0) { | |
95 outstream.write(buf, 0, read); | |
96 } | |
97 outstream.flush(); | |
98 } | |
99 finally { | |
100 outstream.close(); | |
101 } | |
102 } | |
103 finally { | |
104 instream.close(); | |
105 } | |
106 } | |
107 } | |
108 | |
109 private User getUser(HttpServletRequest req) { | |
110 HttpSession session = req.getSession(); | |
111 return (User)session.getAttribute("user"); | |
112 } | |
113 } |