Mercurial > dive4elements > river
annotate flys-client/src/main/java/de/intevation/flys/client/server/ProxyServlet.java @ 3497:88feb3347aa5
Implement a ProxyServlet
Implement a ProxyServlet to be able to restrict the access to the
mapserver too. All queries to the provided map services should go throught
this new ProxyServlet. Currently the ProxyServlet can only handle HTTP GET
requests.
flys-client/trunk@5221 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Bjoern Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Thu, 16 Aug 2012 14:42:36 +0000 |
parents | |
children | 92239b53823f |
rev | line source |
---|---|
3497
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.flys.client.server; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
2 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
3 import java.io.BufferedInputStream; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
4 import java.io.InputStream; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
5 import java.io.IOException; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
6 import java.io.OutputStream; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
7 import java.util.Enumeration; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
8 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
9 import javax.servlet.ServletConfig; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
10 import javax.servlet.http.HttpServlet; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
11 import javax.servlet.http.HttpServletRequest; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
12 import javax.servlet.http.HttpServletResponse; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
13 import javax.servlet.http.HttpSession; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
14 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
15 import org.apache.http.Header; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
16 import org.apache.http.HttpEntity; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
17 import org.apache.http.HttpResponse; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
18 import org.apache.http.StatusLine; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
19 import org.apache.http.client.HttpClient; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
20 import org.apache.http.client.methods.HttpGet; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
21 import org.apache.http.impl.client.DefaultHttpClient; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
22 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
23 import org.apache.log4j.Logger; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
24 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
25 import de.intevation.flys.client.server.auth.User; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
26 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
27 /** |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
28 * Implements a Proxy for HTTP Requests |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
29 */ |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
30 public class ProxyServlet |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
31 extends HttpServlet |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
32 { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
33 private static Logger logger = Logger.getLogger(ProxyServlet.class); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
34 private String remoteurl; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
35 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
36 @Override |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
37 public void init(ServletConfig config) { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
38 this.remoteurl = config.getInitParameter("remoteurl"); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
39 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
40 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
41 @Override |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
42 public void doPost(HttpServletRequest req, HttpServletResponse resp) { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
43 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
44 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
45 @Override |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
46 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
47 HttpClient httpclient = new DefaultHttpClient(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
48 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
49 String requesturi = req.getRequestURI(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
50 String query = req.getQueryString(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
51 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
52 HttpGet httpget = new HttpGet(this.remoteurl + "?" + query); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
53 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
54 for (Enumeration e = req.getHeaderNames(); e.hasMoreElements();) { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
55 String name = (String)e.nextElement(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
56 for (Enumeration f = req.getHeaders(name); f.hasMoreElements();) { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
57 String value = (String)f.nextElement(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
58 logger.debug("Adding request header " + name + " : " + value); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
59 httpget.addHeader(name, value); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
60 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
61 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
62 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
63 HttpResponse response = httpclient.execute(httpget); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
64 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
65 StatusLine statusline = response.getStatusLine(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
66 logger.debug("Response statuscode " + statusline.getStatusCode()); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
67 resp.setStatus(statusline.getStatusCode()); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
68 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
69 Header[] headers = response.getAllHeaders(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
70 for(Header header : headers) { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
71 logger.debug("Adding response header " + header.getName() + " : " + header.getValue()); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
72 resp.setHeader(header.getName(), header.getValue()); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
73 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
74 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
75 HttpEntity entity = response.getEntity(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
76 if (entity != null) { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
77 InputStream instream = entity.getContent(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
78 BufferedInputStream binstream = new BufferedInputStream(instream); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
79 try { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
80 OutputStream outstream = resp.getOutputStream(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
81 int read; |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
82 while ( ( read = binstream.read() ) != -1 ) { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
83 outstream.write(read); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
84 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
85 outstream.close(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
86 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
87 finally { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
88 instream.close(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
89 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
90 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
91 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
92 |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
93 private User getUser(HttpServletRequest req) { |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
94 HttpSession session = req.getSession(); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
95 return (User)session.getAttribute("user"); |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
96 } |
88feb3347aa5
Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
97 } |