Apache httpd mod_rewrite com Tomcat resultando em JSESSIONID perdido

1

Estou trabalhando em um aplicativo da Web Java, para o qual recentemente implementei um módulo de autenticação que se baseia no cookie JSESSIONID para identificar usuários. Eu estava testando em um tomcat local do eclipse e tudo funcionou bem ... Até que eu implantei o aplicativo em nosso VPS (Centos) com um pouco de uma estrutura de instalação mais avançada:

  • Servidor HTTP Apache

  • vários hosts virtuais

  • disse que o webapp é montado em um host virtual com mod_jk. No momento, ele é acessado por 'sub.hostname.com/WEBAPP_NAME/home', mas deve estar disponível com 'sub.hostname.com/home'.

A configuração acima não era um problema tão grande antes da atualização de autenticação (btw, o acesso era tratado pelas opções de segurança do tomcat antes). O antigo VirtualHost ficou assim e funcionou bem:

<VirtualHost *:80>
    ServerName sub.hostname.com
    RewriteEngine on
    RewriteRule ^/(.+)$ /WEBAPP_NAME/$1 [L,PT]
    RewriteRule ^/$ /WEBAPP_NAME/home [L,PT]
    JkMount /* worker
</VirtualHost>

O problema: Após a implantação, a autenticação não funcionaria porque o cookie JSESSIONID não foi gravado. Eu removi o RewriteRules e acessei o aplicativo em 'sub.hostname.com/WEBAPP_NAME/home', onde tudo funcionou bem novamente e recebi um cookie. A partir dessas observações, eu acho que o problema é por causa da URL sendo reescrita e o servlet não está escrevendo o cookie para o caminho correto (?) Se for esse o caso, devo tentar escrever o cookie para algum outro caminho dentro do aplicativo ?

A pergunta: Estou aberto a todas as sugestões sobre uma solução. Por favor, descubra comigo, como eu sou (obviamente) não um especialista em configurações de servidor. Há alguma configuração específica a ser observada no apache ou no tomcat que possa lidar com isso? Ou escolhi inicialmente uma arquitetura de configuração errada?

Muito obrigado antecipadamente!

    
por sldk 11.06.2014 / 20:25

2 respostas

0

Eu fiz mais algumas pesquisas depois de ler as sugestões de CédricC e achei isso: Configurando o Apache, Tomcat, mod_jk e mod_rewrite para servir o tomcat de alto nível

Eu segui as instruções de Kevin Loney para modificar diretamente os cabeçalhos http do Apache usando o mod_headers .

No final, acabei de adicionar a seguinte linha à minha configuração do VirtualHost, que altera todos os caminhos de cookies de /WEBAPP_NAME para / (root) :

Header edit Set-Cookie "^(.*; Path=)/WEBAPP_NAME/?(.*)" $1/$2

Método alternativo - altera o caminho do cookie do Tomcat:

Eu também testei a configuração do caminho do cookie do Tomcat no web.xml do meu aplicativo:

<session-config>
    <session-timeout>30</session-timeout>
    <cookie-config>
        <http-only>true</http-only>
        <path>/</path> <!-- changes the path -->
        <name>COOKIENAME</name>
    </cookie-config>
</session-config>

Obteve o exemplo web.xml da pergunta em link

    
por 18.06.2014 / 19:41
0

Você tem várias opções para alterar o caminho do cookie.

O problema aqui é o rewrite_rule no seu apache conf e tomcat definindo o caminho do cookie para / WEBAPP_NAME /.

No tomcat, você pode alterar o caminho do cookie com o atributo sessionCookiePath no o contexto.

Você também pode implantar seu webapp para / renomeando a guerra para ROOT.war.

E é possível que mod_rewrite possa ser usado para alterar o caminho do cookie.

    
por 14.06.2014 / 21:08