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 }

http://dive4elements.wald.intevation.org