Arquivo WEB-INF/proxy-config.xml


O arquivo proxy-config.xml define a política pela qual os pedidos de URI são suportados para serem transmitidos por meio do proxy e como os caminhos de contexto a partir do cliente são mapeados para o URI em um servidor.

É possível modificar o arquivo proxy-config.xml com um editor de texto. Salve esse arquivo em um local no caminho de classe que o servlet do proxy possa localizar. As alterações no arquivo proxy-config.xml não são dinâmicas; reinicie o servlet para que as alterações sejam efetivadas.

Exemplo de uso

Considere um arquivo archive corporativo (EAR) do JavaTM Platform, Enterprise Edition (Java EE) que contém seu aplicativo baseado em Ajax. Você está utilizando o kit de ferramentas do Dojo para combinar um conteúdo que se origina de um outro servidor e fornece informações sobre locais de cafeterias. O formato de dados é retornado a partir de outro servidor como dados JavaScriptTM Object Notation (JSON). Combine os dados JSON retornados com o aplicativo baseado no Ajax que você está desenvolvendo, que é geralmente chamado de mashup do lado do cliente.

Digite as seguintes linhas de código:

GET http://www.myinformation.com/location/coffee  HTTP/1.1
O seguinte conteúdo JSON é retornado:
{
   "locations":{
      "location":[
         {
            "id":"Exemplo Jumpin Joes",
            "city":"Qualquer lugar",
            "location":"Weston Pkwy",
            "address":"126 Weston Pkwy, Anywhere, NC 27513",
            "date":"2 de maio de 2008"
         },
         {
            "id":"Exemplo Café & Crepes",
            "city":"Qualquer lugar",
            "location":"Crossroads Blvd",
            "address":"123 Crossroads Blvd, Anywhere, NC 27518",
            "date":"3 de maio de 2008"
         } ]
   }
}

Utilizando o proxy do Ajax, você pode disponibilizar o serviço incluindo as seguintes linhas de código em seu arquivo proxy-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<proxy-rules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:proxy="http://www.ibm.com/xmlns/prod/websphere/featurepack/v6.1/proxy-config" xsi:noNamespaceSchemaLocation="C:\temp\proxy-config.xsd">  
        <proxy:mapping contextpath="/location/coffee" url="http://www.myinformation.com"/>
        <proxy:policy url="*" acf="none">
                <proxy:actions>
                        <proxy:method>GET</proxy:method>                    
                </proxy:actions>
                
        </proxy:policy>
</proxy-rules>

O contextpath acima é a raiz de contexto do serviço que está sendo acessado. A URL é a URL raiz para o serviço. Como exemplo, você poderia acessar o serviço diretamente em um navegador utilizando http://www.myinformation.com/location/coffee

O caminho para acessar o proxy em seu código depende de como o proxy do Ajax foi implementado. Considere o fragmento de XML de um web.xml que pode ser utilizado para o proxy do Ajax:

	<servlet-mapping>
		<servlet-name>ProxyServlet</servlet-name>
		<url-pattern>/proxymashup/*</url-pattern> 		
	</servlet-mapping>	
No exemplo acima, o ProxyServlet é o servlet para o proxy do Ajax. O <url-pattern> é o mapeamento de servlet para /proxymashup/*. Se a raiz de contexto do arquivo WAR (Web Application Archive) fosse /proxy, você utilizaria o seguinte código para acessar o serviço utilizando o Dojo:
var deferred = dojo.xhrGet( {
                             url: "/proxy/proxymashup/location/coffee",
                             timeout: 5000,            
                             handleAs : "text/json",
                             headers: { "Content-Type":"text/html" },          
                             } );
                  

Esquema XML

Os esquemas XML para o arquivo proxy-config.xml estão localizados no diretório WEB-INF/ para o arquivoAjaxProxy.war. Os dois esquemas são proxy-config_1.0.1.xsd e proxy-config_1.0.xsd. O proxy-config_1.0.1.xsd corresponde à versão 1.0.1 e contém novos recursos como Filtragem de IP. Os usuários podem continuar usando versões do proxy-config.xml que correspondem ao proxy-config_1.0.xsd.

Filtrando Tipos MIME

O tipo MIME (Multipurpose Internet Mail Extensions) controla os tipos de mídia que são aceitos do serviço para o proxy. No exemplo anterior, se você desejar assegurar que apenas o tipo de retorno text/json seja retornado para o cliente, poderá incluir a seguinte entrada no arquivo proxy-config.xml:
<proxy:policy url="*" acf="none">
    .
    .
    <proxy:mime-types>
       <proxy:mime-type>text/json</proxy:mime-type>
    </proxy:mime-types>
    .
    .
</proxy:policy>

Se o serviço retornou text/html, o proxy responderá retornando uma condição de erro para o cliente, uma vez que o text/html não está listado como um tipo de conteúdo aceitável no servidor. Se o <proxy:mime-types> não for especificado, o comportamento será permitir todos os tipos de conteúdo.

Filtrando Cookies

É possível usar o proxy Ajax para controlar o fluxo de cookies para o cliente ao especificar uma política de cookie. Apenas os cookies que corresponderem ao valor na política de cookie poderão ser transmitidos pelo proxy Ajax. Se a política de cookie estiver especificada, então NENHUM cookie tem permissão para passar pelo proxy Ajax.

Para controlar o fluxo de cookies, defina o nome de cookie permitido no arquivo proxy-config.xml. O exemplo a seguir mostra como você pode configurar o proxy para transmitir apenas os cookies que possuem o nome de chave de cookie Session-Cookie-0.

<proxy:policy url="*" acf="none">
    .
    .
    <proxy:cookies>
       <proxy:cookie>Session-Cookie-0</proxy:cookie>
    </proxy:cookies>
    .
    .
</proxy:policy>

Filtrando Cabeçalhos HTTP

Por padrão, o proxy do Ajax permite que os seguintes cabeçalhos HTTP sejam transmitidos para o cliente: User-Agent, Accept*, Content*, Authorization*. O (*) representa curingas. Todos os outros cabeçalhos são eliminados pelo proxy do Ajax antes de serem transmitidos juntamente com o pedido para o serviço. Geralmente, esses cabeçalhos são suficientes para a maioria dos aplicativos. É possível definir seu próprio conjunto de cabeçalhos HTTP permitidos, inserindo a seguinte configuração no arquivo de configuração do proxy:
<proxy:policy url="*" acf="none">
    .
    .
    <proxy:headers>
       <proxy:header>User-Agent</proxy:header>
       <proxy:header&gtAccept*</proxy:header>     
       <proxy:header>Content*</proxy:header>
       <proxy:header>Authorization*</proxy:header>
       <proxy:header>My-New-Header</proxy:header>
       <proxy:header>My-Other-New-Header</proxy:header>                       
    </proxy:headers>
    .
    .
</proxy:policy>

Filtrando Métodos HTTP

No exemplo anterior, o proxy do Ajax é configurado para só aceitar pedidos GET do cliente. Um POST ou outro pedido de método HTTP retorna uma condição de erro para o cliente. O proxy do Ajax suporta pedidos GET, POST, PUT, HEAD ou DELETE. Você deve especificar pelo menos um método HTTP suportado.

Suporte para SSL

Vários serviços podem precisar de uma conexão de soquete seguro que utilize SSL. Como um aplicativo da Web, o proxy Ajax alavanca o JavaTM Secure Socket Extension (JSSE) e é completamente suportado pelo produto. Consulte a documentação do WebSphere® correspondente sobre o suporte ao certificado SSL.

Utilizando Certificados SSL Não Assinados

Por padrão, o proxy do Ajax não suporta certificados não assinados. Em vez disso, você recebe uma exceção SSL com a mensagem Handshake SSL não reconhecido. Se você precisar de certificados SSL não assinados para teste ou desenvolvimento, poderá ativar a seguinte opção no arquivo proxy-config.xml:
    <proxy-meta-data>
        <proxy:name>unsigned_ssl_certificate_support</proxy:name>
        <proxy:value>true</proxy:value>
    </proxy-meta-data>

Quando unsigned_ssl_certificate_support é designado, o proxy Ajax aceita qualquer certificado SSL. Na prática, essa configuração é usada para desenvolvimento e não deve ser usada em um ambiente de produção.

Opções de Configuração

O proxy Ajax pode ser ajustado com um número de parâmetros.

maxconnectionsperhost

O maxconnectionperhost é um valor global que especifica o número máximo de conexões mantidas ativas para qualquer combinação de host ou de porta. Por padrão, o valor é configurado para 2. Aumente o valor se seu aplicativo acessar mais de dois sites remotos para o conteúdo.

<proxy:meta-data>
   <proxy:name>maxconnectionsperhost</proxy:name>
       <proxy:value>2</proxy:value>
</proxy:meta-data>

maxtotalconnections

O maxtotalconnections é o total máximo de conexões suportado pelo proxy. O valor padrão é 5. O valor escolhido deve ser alto o suficiente para suportar o número de conexões simultâneas que você pode receber. Na prática, é o fator de como o contêiner da Web é configurado e de quantas conexões simultâneas o contêiner suporta.

<proxy:meta-data>
   <proxy:name>maxtotalconnections</proxy:name>
   <proxy:value>5</proxy:value>
</proxy:meta-data>

socket-timeout

O socket-timeout define o tempo limite de espera de soquete padrão em milissegundos para os dados quando uma conexão for estabelecida. O padrão é um valor de tempo limite 0 que é interpretado como um tempo limite infinito.

<proxy:meta-data>
   <proxy:name>socket-timeout</proxy:name>
   <proxy:value>5000</proxy:value>
</proxy:meta-data>

retries

O retries define o número de novas tentativas de soquete que o proxy Ajax deve executar antes de desistir de estabelecer uma conexão. O valor padrão é duas novas tentativas.

<proxy:meta-data>
   <proxy:name>retries</proxy:name>
   <proxy:value>3</proxy:value>
</proxy:meta-data>

connection-timeout

O tempo limite de conexão define o tempo em milissegundos antes que uma conexão seja estabelecida. Se nenhum valor for especificado, o valor padrão usado será 60000. Se 0 for usado, o valor será interpretado de modo que nenhum tempo limite será usado.

<proxy:meta-data>
   <proxy:name>connection-timeout</proxy:name>
   <proxy:value>3000</proxy:value>
</proxy:meta-data>

connection-pool-timeout

O tempo limite de conexão define o tempo em milissegundos antes que uma conexão seja estabelecida. Esse é o caso para todas as solicitações subsequentes depois que maxtotalconnections é excedido. Se 0 for usado, o valor será interpretado de modo que nenhum tempo limite será usado. Zero (0) também é o valor padrão.

<proxy:meta-data>
   <proxy:name>connection-pool-timeout</proxy:name>
   <proxy:value>1000</proxy:value>
</proxy:meta-data>

forward-http-errors

Por padrão, o proxy Ajax encaminhará apenas os códigos de status HTTP maiores ou iguais a 200 e menores que 400. Os códigos de status que estiverem fora do intervalo automaticamente são alterados para o erro 404 Arquivo Não Localizado. A única exceção é o código 401 (não autorizado), que resulta no erro 403 Proibido, a menos que o atributo basic-auth-support seja ativado para esse pedido específico.

É possível encaminhar códigos HTTP maiores ou iguais a 400 com uma mensagem ao configurar o meta parâmetro forward-http-errors no arquivo proxy-config.xml

<proxy:meta-data>
   <proxy:name>forward-http-errors</proxy:name>
   <proxy:value>true</proxy:value>
</proxy:meta-data>

Conectando-se a um outro Proxy

O proxy do Ajax pode ser configurado para conectar-se a um outro proxy antes de acessar a rede. A conexão com um proxy de passagem poderá ser necessária se o proxy do Ajax precisar passar por um firewall delimitador antes de acessar a rede. O proxy do Ajax suporta a autenticação Básica.

O exemplo a seguir mostra a configuração de um firewall de proxy fictício. O passthru_host é um parâmetro obrigatório. Outros como passthru_type, passthru_username e passthru_password são parâmetros opcionais. O parâmetro passthru_type significa o tipo de autenticação usado. O tipo padrão é BASIC. Alternativamente, DIGEST e NTLM podem ser usados também. NTLM requer os parâmetros adicionais passthru_hostname e passthru_domain. Os parâmetros passthru_port e passthru_realm também são opcionais. Se um parâmetro passthru_port não for especificado, um valor padrão da porta 80 será utilizado. Se um parâmetro passthru_realm não for especificado, as credenciais serão enviadas para todas as tentativas de autenticação. Especifique o parâmetro passthru_realm em um ambiente de produção para evitar que as informações de nome de usuário e de senha sejam apresentadas para todos os pedidos de autenticação.

	<proxy-meta-data>
       <proxy:name>passthru_type</proxy:name>
       <proxy:value>BASIC</proxy:value>
     </proxy-meta-data>
    <proxy-meta-data>
       <proxy:name>passthru_host</proxy:name>
       <proxy:value>9.17.237.132</proxy:value>
     </proxy-meta-data>
    <proxy-meta-data>
       <proxy:name>passthru_port</proxy:name>
       <proxy:value>3128</proxy:value>
     </proxy-meta-data>
    <proxy-meta-data>
       <proxy:name>passthru_realm</proxy:name>
       <proxy:value>MyRealm</proxy:value>
     </proxy-meta-data>
    <proxy-meta-data>
       <proxy:name>passthru_username</proxy:name>
       <proxy:value>username</proxy:value>
     </proxy-meta-data>
    <proxy-meta-data>
       <proxy:name>passthru_password</proxy:name>
       <proxy:value>password</proxy:value>
    </proxy-meta-data>

Ativando Autenticação Básica

A autenticação básica pode ser ativada ao configurar o atributo basic-auth-support para uma política no arquivoproxy-config.xml. Por exemplo:

<proxy-rules
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:proxy="http://www.ibm.com/xmlns/prod/sw/ajax/proxy-config/1.1">
 <proxy:mapping contextpath="/proxy/*" />

 <proxy:policy url="*" acf="none" basic-auth-support="true">
    <proxy:actions>
       <proxy:method>GET</proxy:method>
    </proxy:actions>
 </proxy:policy>
</proxy-rules>

No exemplo, o proxy Ajax encaminhará as informações de status e de cabeçalho HTTP de volta para o serviço e cliente de destino. Se basic-auth-support não for configurado e o proxy Ajax receber um pedido 401, o proxy mapeará o pedido para um código 403 : HTTP Proibido.

Nota: Atualmente, o mecanismo de Autenticação Básica é o único método de autenticação HTTP suportado pelo proxy.

Filtrando endereços IP

A Filtragem de IP do proxy Ajax permite criar lista de desbloqueio ou de bloqueio de endereços IP para proteger os serviços com os quais o proxy Ajax também possa se conectar. A lista de bloqueio contém os endereços IP de serviço que os clientes também não podem se conectar, enquanto que a lista de desbloqueio contém endereços IP de serviços que o proxy Ajax também pode se conectar.

O proxy:ipfilter define os endereços IP para o filtro. O proxy:allow define a lista de desbloqueio para um endereço ou um intervalo de endereços IP. O proxy:deny define a lista de bloqueio de um endereço ou um intervalo de endereços IP.

Por exemplo:
<proxy-rules
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:proxy="http://www.ibm.com/xmlns/prod/sw/ajax/proxy-config/1.1">
 <proxy:mapping contextpath="/proxy/*" >

    <proxy:ipfilter>
         <proxy:deny>9.6.0.0/255.255.0.0</proxy:deny>
         <proxy:allow>9.6.1.0/255.255.255.0</proxy:allow>
         <proxy:deny>9.6.1.4</proxy:deny>
    </proxy:ipfilter>

 </proxy:mapping>

 <proxy:policy url="*" acf="none">
         <proxy:actions>
                 <proxy:method>GET</proxy:method>
         </proxy:actions>
 </proxy:policy>
</proxy-rules>

Nesse exemplo, o proxy Ajax filtra o seguinte: Portanto, nesse caso, o proxy não permite acesso ao endereço IP 9.6.2.5 ou 9.6.120.7 e responderia com a seguinte mensagem:
CWXJX1000E: O destino especificado que hospeda o endereço IP é proibido por regra.

Entretanto, o proxy Ajax acessa 9.6.1.5 ou 9.6.1.120, mas não negará acesso a 9.6.1.4.

Outro exemplo é iniciado por uma lista de bloqueios de todos os endereços IP, porém inclui intervalos de IP adicionais. Neste exemplo, o seguinte elemento de código bloqueia todos os endereços: *.*.*.*. O endereço IP no intervalo 98.137.80.1 a 98.137.254 é suportado.

<proxy-rules
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:proxy="http://www.ibm.com/xmlns/prod/sw/ajax/proxy-config/1.1">
 <proxy:mapping contextpath="/rss/economy" url="http://rss.news.yahoo.com">

     <proxy:ipfilter>
         <proxy:deny>*.*.*.*</proxy:deny>
         <proxy:allow>98.137.80.0/255.255.255.0</proxy:allow>
    </proxy:ipfilter>
 </proxy:mapping>

 <proxy:policy url="*" acf="none">
         <proxy:actions>
                 <proxy:method>GET</proxy:method>
         </proxy:actions>
 </proxy:policy>
</proxy-rules>

Conforme você inclui novas regras de filtro, é possível combiná-las de várias formas, mas o proxy Ajax sempre as manipula na ordem na qual elas são definidas. Isso significa que a última regra correspondente sempre tomará efeito, independente de quaisquer regras de permissão ou de negação que vierem antes dela.


Termos de Uso | Feedback