Tenho um projeto em vraptor e preciso deixar o PATH do projeto “dinâmico”. A url padrão de um projeto é : http://localhost:8080/meuprojeto/ . Mas várias empresas irão usar o projeto. Cada uma possui os seus usuários. Então tenho que separar as empresas pelo PATH. Quando o usuário digitar “/meuprojeto/nomedaempresa/login” ele irá para a página de login da empresa. E ao logar com essa empresa o PATH “/meuprojeto/nomedaempresa/” continue. Resumindo, preciso de um contexto após o “/meuprojeto/” que seja verificado no login e redirecione para a empresa desejado e quando o usuário logar, esse contexto continue. Estou a algum tempo procurando nos foruns, encontrei essa classe que o Lucas passou:
O problema e que já compila o código antes de executar.
Você precisaria, enviar uma requisição para depois voltar a página.
Entende?
frafael
Provavelmente eu não consiga usar esta classe para fazer o que quero. Teria alguma maneira de fazer com que “/meuprojeto/nomedaempresa/” ficasse após o login? Eu já tentei usar o @Path("/{contexto}"), mas tenho que injetar no metódo o “contexto”, e isso é muito ruim.
Opa, obrigado pela resposta, na verdade eu já uso dessa maneira, tenho a empresa na sessão e eu coloco o @Path("{empresa}") em todas os controllers, e consequentemente em seus métodos. O problema é que eu tenho que colocar a variável empresa como parâmetro em todos os métodos das minhas classes controllers.
public void login(String empresa, Usuario usuario) { }
E como eu já disse, eu acho isso ruim. Se eu conseguisse mudar a uri seria ótimo. Não sei se isso é possível.
jweibe
frafael:
Opa, obrigado pela resposta, na verdade eu já uso dessa maneira, tenho a empresa na sessão e eu coloco o @Path("{empresa}") em todas os controllers, e consequentemente em seus métodos. O problema é que eu tenho que colocar a variável empresa como parâmetro em todos os métodos das minhas classes controllers.
public void login(String empresa, Usuario usuario) { }
E como eu já disse, eu acho isso ruim. Se eu conseguisse mudar a uri seria ótimo. Não sei se isso é possível.
Mais na verdade você não precisa colocar o parâmetro em todo método! Com certeza você tem um Interceptador pra validar o usuário certo?
Então é aqui que você tem que validar o usuário se ele esta no path da empresa correto.
Ex:
usuário: zezinho -> empresa: empresaX
usuário: joão-> empresa: empresaY
No Interceptador você valida isso se o usuário joão tentar acessar o path da empresaX você verifica que ele e da empresaY
e redireciona ele pro contexto correto.
frafael
Sim, sim. É verdade. Mas tem uma coisa que eu não gostei muito. Se acessar um método por exemplo:
Só que ao redirecionar para outro método usando “result.redirectTo(this).objetos();” eu perco a empresa.
jweibe
Mais eu acredito que ao fazer o redirecionamento
result.redirectTo(this).objetos();
Essa ação passará pelo Inteceptar e consequentemente você redirecionara pra a url com o nome da empresa corretamente,
uma vez que o atributa na sessão empresa só será inserido na url pra fazer uma “firula” (acredito eu, url personalizada).
frafael
Pelo interceptor que tenho, eu sempre perco. Teria como você me dar um exemplo?
Obrigado pela ajuda.
frafael
O que acontece é que no meu interceptor, eu redireciono para o método, e se eu quiser passar a empresa, eu tenho que passar como parâmetro.