annotate gwt-client/src/main/java/org/dive4elements/river/client/server/ProxyServlet.java @ 5861:172338b1407f

GWT client: Added copyright header.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 28 Apr 2013 14:30:15 +0200
parents 5aa05a7a34b7
children ea9eef426962
rev   line source
5861
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
6 * documentation coming with Dive4Elements River for details.
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
172338b1407f GWT client: Added copyright header.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5835
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
9 package org.dive4elements.river.client.server;
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
10
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
11 import java.io.InputStream;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
12 import java.io.IOException;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
13 import java.io.OutputStream;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
14 import java.util.Enumeration;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
15
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
16 import javax.servlet.ServletConfig;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
17 import javax.servlet.http.HttpServlet;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
18 import javax.servlet.http.HttpServletRequest;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
19 import javax.servlet.http.HttpServletResponse;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
20 import javax.servlet.http.HttpSession;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
21
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
22 import org.apache.http.Header;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
23 import org.apache.http.HttpEntity;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
24 import org.apache.http.HttpResponse;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
25 import org.apache.http.StatusLine;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
26 import org.apache.http.client.HttpClient;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
27 import org.apache.http.client.methods.HttpGet;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
28 import org.apache.http.impl.client.DefaultHttpClient;
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 import org.apache.log4j.Logger;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
31
5835
821a02bbfb4e Fixed internal java dependencies
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5834
diff changeset
32 import org.dive4elements.river.client.server.auth.User;
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
33
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
34 /**
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
35 * Implements a Proxy for HTTP Requests
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
36 */
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
37 public class ProxyServlet
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
38 extends HttpServlet
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 private static Logger logger = Logger.getLogger(ProxyServlet.class);
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
41 private String remoteurl;
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
42
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
43 @Override
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
44 public void init(ServletConfig config) {
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
45 this.remoteurl = config.getInitParameter("remoteurl");
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
46 }
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
47
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
48 @Override
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
49 public void doPost(HttpServletRequest req, HttpServletResponse resp) {
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
50 }
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 @Override
3498
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
53 public void doGet(HttpServletRequest req, HttpServletResponse resp)
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
54 throws IOException {
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
55 HttpClient httpclient = new DefaultHttpClient();
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
56
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
57 String requesturi = req.getRequestURI();
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
58 String query = req.getQueryString();
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
59
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
60 HttpGet httpget = new HttpGet(this.remoteurl + "?" + query);
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
61
3498
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
62 boolean debug = logger.isDebugEnabled();
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
63
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
64 for (Enumeration e = req.getHeaderNames(); e.hasMoreElements();) {
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
65 String name = (String)e.nextElement();
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
66 for (Enumeration f = req.getHeaders(name); f.hasMoreElements();) {
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
67 String value = (String)f.nextElement();
3498
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
68 if (debug) {
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
69 logger.debug(
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
70 "Adding request header " + name + " : " + value);
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
71 }
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
72 httpget.addHeader(name, value);
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
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
76 HttpResponse response = httpclient.execute(httpget);
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
77
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
78 StatusLine statusline = response.getStatusLine();
3498
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
79 if (debug) {
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
80 logger.debug("Response statuscode " + statusline.getStatusCode());
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
81 }
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
82 resp.setStatus(statusline.getStatusCode());
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
83
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
84 Header[] headers = response.getAllHeaders();
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
85 for(Header header : headers) {
3498
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
86 if (debug) {
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
87 logger.debug(
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
88 "Adding response header " + header.getName() +
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
89 " : " + header.getValue());
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
90 }
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
91 resp.setHeader(header.getName(), header.getValue());
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
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
94 HttpEntity entity = response.getEntity();
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
95 if (entity != null) {
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
96 InputStream instream = entity.getContent();
3498
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
97 byte [] buf = new byte[4096];
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
98 try {
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
99 OutputStream outstream = resp.getOutputStream();
3498
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
100 try {
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
101 int read;
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
102 while ((read = instream.read(buf)) >= 0) {
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
103 outstream.write(buf, 0, read);
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
104 }
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
105 outstream.flush();
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
106 }
3498
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
107 finally {
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
108 outstream.close();
92239b53823f ProxyServlet: Use block instead of byte wise copy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3497
diff changeset
109 }
3497
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
110 }
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
111 finally {
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
112 instream.close();
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
113 }
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
114 }
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
115 }
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
116
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
117 private User getUser(HttpServletRequest req) {
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
118 HttpSession session = req.getSession();
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
119 return (User)session.getAttribute("user");
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
120 }
88feb3347aa5 Implement a ProxyServlet
Bjoern Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
121 }

http://dive4elements.wald.intevation.org