Boa tarde senhores,
achei o problema e agora está funcionando.
O que acontece é o seguinte, a biblioteca pac4j mexe diretamente no HttpServletRequest e HttpServletResponse, alterando seus parâmetros, etc, renovando o HttpSession, não utilizando a classe Result do Vraptor pra isso ou outra classe.
Ela possibilita a implementação de um Adapter passando um objeto dele + HttpStatus Code. Dessa forma teria o trabalho bem intenso de verificar o tipo de status e a ação tomada, mandando pro Result.
Mas a pergunta depois de um certo tempo foi que: Por que o vraptor não identifica essas mudanças feitas ? E então me deparei com esta classe
com este trecho
@Produces @RequestScoped public HttpSession getSession(){ return requestStarted.getRequest().getSession(); }
|
Então o que acontecia, o Vraptor, dentro de si, injetava o HttpSession, sendo ele mantido pelo CDI por todo escopo de request. Como a biblioteca captura o HttpSession por dentro do HttpServletRequest, o CDI não atualizava a sua referencia do HttpSession, ficando duas versões em memória. Implementando um novo metodo pra produzir o HttpSession, sem passar o escopo, tanto o vraptor quanto a biblioteca trabalham com a mesma instancia do HttpSession e resolveu o problema do controle da sessão.
Outro fator foi que, os redirects feitos, como ( um status 302 + Location header) eram sobreescritos pelo vraptor, pois afinal, entrava num metodo e nao era chamado nada do Result, fazendo ele direcionar para o JSP padrão que gerava Exception, mudando o status para 500 e não redirecionando o usuário. Identifiquei isso pois no cabeçalho da resposta, estava a estava o "Location: URL".
Ok, isso aconteceu pois não foi feito o commit do response pro Navegador corretamente, por estar sobreescrevendo. forcei isso e funcionou o redirect, mas começou a gerar excecao, pois nao pode realizar o commit do response duas vezes. Pensei comigo, e se mandar o result nao fazer nada?
Bingo... Sem stack, mandando a resposta corretamente e tendo o funcionamento adequado.
Agora a pergunta é: Essa adequação que fiz foi a correta? O Producer do vRaptor está correto com o comportamento de ter o escopo definido?
Obrigado a todos pela força!