MAPREDUCE-3691. webservices add support to compress response. (Thomas Graves via mahadev)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1234989 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
12645ff6c0
commit
c415dee2b7
@ -528,6 +528,9 @@ Release 0.23.1 - Unreleased
|
|||||||
|
|
||||||
MAPREDUCE-3705. ant build fails on 0.23 branch. (Thomas Graves via
|
MAPREDUCE-3705. ant build fails on 0.23 branch. (Thomas Graves via
|
||||||
mahadev)
|
mahadev)
|
||||||
|
|
||||||
|
MAPREDUCE-3691. webservices add support to compress response.
|
||||||
|
(Thomas Graves via mahadev)
|
||||||
|
|
||||||
Release 0.23.0 - 2011-11-01
|
Release 0.23.0 - 2011-11-01
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ import com.google.common.collect.Lists;
|
|||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import com.google.inject.servlet.GuiceFilter;
|
import com.google.inject.servlet.GuiceFilter;
|
||||||
import com.google.inject.servlet.ServletModule;
|
import com.google.inject.servlet.ServletModule;
|
||||||
|
import com.sun.jersey.api.container.filter.GZIPContentEncodingFilter;
|
||||||
import com.sun.jersey.api.core.ResourceConfig;
|
import com.sun.jersey.api.core.ResourceConfig;
|
||||||
import com.sun.jersey.core.util.FeaturesAndProperties;
|
import com.sun.jersey.core.util.FeaturesAndProperties;
|
||||||
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
|
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
|
||||||
@ -160,6 +161,8 @@ public abstract class WebApp extends ServletModule {
|
|||||||
params.put(ResourceConfig.FEATURE_IMPLICIT_VIEWABLES, "true");
|
params.put(ResourceConfig.FEATURE_IMPLICIT_VIEWABLES, "true");
|
||||||
params.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, "true");
|
params.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, "true");
|
||||||
params.put(FeaturesAndProperties.FEATURE_XMLROOTELEMENT_PROCESSING, "true");
|
params.put(FeaturesAndProperties.FEATURE_XMLROOTELEMENT_PROCESSING, "true");
|
||||||
|
params.put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, GZIPContentEncodingFilter.class.getName());
|
||||||
|
params.put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, GZIPContentEncodingFilter.class.getName());
|
||||||
filter("/*").through(GuiceContainer.class, params);
|
filter("/*").through(GuiceContainer.class, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ public class AmIpFilter implements Filter {
|
|||||||
proxyUriBase = conf.getInitParameter(PROXY_URI_BASE);
|
proxyUriBase = conf.getInitParameter(PROXY_URI_BASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<String> getProxyAddresses() throws ServletException {
|
protected Set<String> getProxyAddresses() throws ServletException {
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
if(proxyAddresses == null || (lastUpdate + updateInterval) >= now) {
|
if(proxyAddresses == null || (lastUpdate + updateInterval) >= now) {
|
||||||
@ -97,10 +97,13 @@ public class AmIpFilter implements Filter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String user = null;
|
String user = null;
|
||||||
for(Cookie c: httpReq.getCookies()) {
|
|
||||||
if(WebAppProxyServlet.PROXY_USER_COOKIE_NAME.equals(c.getName())){
|
if (httpReq.getCookies() != null) {
|
||||||
user = c.getValue();
|
for(Cookie c: httpReq.getCookies()) {
|
||||||
break;
|
if(WebAppProxyServlet.PROXY_USER_COOKIE_NAME.equals(c.getName())){
|
||||||
|
user = c.getValue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(user == null) {
|
if(user == null) {
|
||||||
|
@ -0,0 +1,121 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.hadoop.yarn.server.webproxy.amfilter;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.FilterConfig;
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
|
|
||||||
|
public class TestAmFilter {
|
||||||
|
|
||||||
|
private String proxyHost = "bogushost.com";
|
||||||
|
private String proxyUri = "http://bogus";
|
||||||
|
|
||||||
|
private class TestAmIpFilter extends AmIpFilter {
|
||||||
|
|
||||||
|
private Set<String> proxyAddresses = null;
|
||||||
|
|
||||||
|
protected Set<String> getProxyAddresses() {
|
||||||
|
if(proxyAddresses == null) {
|
||||||
|
proxyAddresses = new HashSet<String>();
|
||||||
|
}
|
||||||
|
proxyAddresses.add(proxyHost);
|
||||||
|
return proxyAddresses;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static class DummyFilterConfig implements FilterConfig {
|
||||||
|
final Map<String, String> map;
|
||||||
|
|
||||||
|
|
||||||
|
DummyFilterConfig(Map<String,String> map) {
|
||||||
|
this.map = map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFilterName() {
|
||||||
|
return "dummy";
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public String getInitParameter(String arg0) {
|
||||||
|
return map.get(arg0);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public Enumeration<String> getInitParameterNames() {
|
||||||
|
return Collections.enumeration(map.keySet());
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public ServletContext getServletContext() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filterNullCookies() throws Exception {
|
||||||
|
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
|
||||||
|
|
||||||
|
Mockito.when(request.getCookies()).thenReturn(null);
|
||||||
|
Mockito.when(request.getRemoteAddr()).thenReturn(proxyHost);
|
||||||
|
|
||||||
|
HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
|
||||||
|
|
||||||
|
final AtomicBoolean invoked = new AtomicBoolean();
|
||||||
|
|
||||||
|
FilterChain chain = new FilterChain() {
|
||||||
|
@Override
|
||||||
|
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse)
|
||||||
|
throws IOException, ServletException {
|
||||||
|
invoked.set(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Map<String, String> params = new HashMap<String, String>();
|
||||||
|
params.put(AmIpFilter.PROXY_HOST, proxyHost);
|
||||||
|
params.put(AmIpFilter.PROXY_URI_BASE, proxyUri);
|
||||||
|
FilterConfig conf = new DummyFilterConfig(params);
|
||||||
|
Filter filter = new TestAmIpFilter();
|
||||||
|
filter.init(conf);
|
||||||
|
filter.doFilter(request, response, chain);
|
||||||
|
Assert.assertTrue(invoked.get());
|
||||||
|
filter.destroy();
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user