Gastaldi's Blog
Mais um blog sobre Java …
Acessando o HttpServletRequest no LoginModule (JAAS)
Publicado por em 4 de fevereiro de 2009
Alguma vez você já precisou acessar um objeto HttpServletRequest dentro de um LoginModule no JAAS ? Para quem não conhecia (isso me inclui !), é necessário utilizar a API JACC (Java Authorization Contract for Containers) :
import javax.security.jacc.PolicyContext; import javax.security.jacc.PolicyContextException; /** The JACC PolicyContext key for the current Subject */ public static final String WEB_REQUEST_KEY = "javax.servlet.http.HttpServletRequest"; HttpServletRequest request = (HttpServletRequest) PolicyContext.getContext(WEB_REQUEST_KEY);
Ah ! Essa dica vale para o Glassfish e o JBoss (os servidores de aplicação que testei até então) !
Olá amigo,
Esta dica valeu muito!
Estou enfrentando um outro problema que gostaria de tirar essa dúvida.
Quando estou utilizando um ambiente segura (SSL), não estou conseguindo recuperar o request pelo PolicyContext.getContext(WEB_REQUEST_KEY); Ele vem nulo. Se rodo a aplicação sem estar no https, consigo recuperar. Este comando estou utilizando dentro de um realm customizado. Preciso do request para anexar nele as mensagens de erro durante o processo do login. Está faltando alguma coisa quando o ambiente é seguro?
Desde já muito obrigado!
Olá Christiano !
Que bom que tenha gostado. Em relação ao HTTP/S acho estranho isso não funcionar. Talvez seja outra chave, mas não cheguei a testar. Que servidor de aplicação você está usando ?
Estou utilizando o glassfish 3.1.2.2.
Pois é, quando crio no web.xml uma restrição para todas as URL’s, configurando o user-data-constraint para CONFIDENTIAL, ao entrar na aplicação vai para o login, e dentro do realm que eu implementei para o glassfish, o request vem nulo. Utilizo para segurança o JAAS, implementando o LoginModule (estendendo AppservPasswordLoginModule) e Realm (estendendo o AppservRealm).
Muito obrigado pela atenção.