Vou tentar explicar de uma maneira bem geral pra ver como é possível fazer o que estou querendo.
Imaginem que eu tenho duas aplicações Web implantadas em um servidor Tomcat. Imaginem que eu tenha que fazer login na primeira aplicação e dependendo do perfil do usuário, eu tenha que redirecioná-lo para a segunda aplicação.
Até aí é a parte fácil. Vamos a parte interessante. A segunda aplicação também necessita de autenticação, porém eu gostaria de aproveitar a autenticação feita já na primeira aplicação para que não seja necessário o usuário se autenticar denovo.
Existe alguma maneira de fazer isso?
Só pra saberem o que eu já tentei… Estou usando JSP/Servlets puro…
Tentei usar o “requestDispacher” mais a não ser que eu esteja fazendo errado, só consigo redirecionar para a mesma aplicação e neste meu caso eu precisava redirecionar para outra.
Uma outra tentativa que fiz foi usando o “sendRedirect”, neste caso eu consigo redirecionar para qualquer url, assim, ele me atenderia no redirecionamento. Porém, preciso passar os parâmetros de autenticação. Uma maneira que vi seria anexá-los a url, mais isso fica esposto no browser e passar usuário e senha dessa maneira é uma péssima idéia.
Exemplificando o cenário:
Aplicacao 1
http://localhost:8080/App1
(usuário se loga aqui e dependendo do perfil é redirecionado para “Aplicacao 2”.
Aplicacao 2
http://localhost:8080/App2
(usuário tem de ser redirecionado pra cá e já ser autenticado automaticamente)
Alguém já teve de fazer algo parecido ou tem alguma idéia de como fazer?
nunca precisei fazer algo assim, mas o que você pode fazer é:
Ter uma Servlet na App2 que receba Login e Senha e coloque o Usuário como logado.
e Na App1 você passa os parâmetros para a Servlet de Login da aplicação 2 via método POST.
isso tudo você tem que fazer pois (me corrijam se eu estiver errado) não é possível compartilhar dados em Escopos de Sessão e Aplicação entre contextos diferentes.
Vou tentar explicar de uma maneira bem geral pra ver como é possível fazer o que estou querendo.
Imaginem que eu tenho duas aplicações Web implantadas em um servidor Tomcat. Imaginem que eu tenha que fazer login na primeira aplicação e dependendo do perfil do usuário, eu tenha que redirecioná-lo para a segunda aplicação.
Até aí é a parte fácil. Vamos a parte interessante. A segunda aplicação também necessita de autenticação, porém eu gostaria de aproveitar a autenticação feita já na primeira aplicação para que não seja necessário o usuário se autenticar denovo.
Existe alguma maneira de fazer isso?
Só pra saberem o que eu já tentei… Estou usando JSP/Servlets puro…
Tentei usar o “requestDispacher” mais a não ser que eu esteja fazendo errado, só consigo redirecionar para a mesma aplicação e neste meu caso eu precisava redirecionar para outra.
Uma outra tentativa que fiz foi usando o “sendRedirect”, neste caso eu consigo redirecionar para qualquer url, assim, ele me atenderia no redirecionamento. Porém, preciso passar os parâmetros de autenticação. Uma maneira que vi seria anexá-los a url, mais isso fica esposto no browser e passar usuário e senha dessa maneira é uma péssima idéia.
Exemplificando o cenário:
Aplicacao 1
http://localhost:8080/App1
(usuário se loga aqui e dependendo do perfil é redirecionado para “Aplicacao 2”.
Aplicacao 2
http://localhost:8080/App2
(usuário tem de ser redirecionado pra cá e já ser autenticado automaticamente)
Alguém já teve de fazer algo parecido ou tem alguma idéia de como fazer?
[/quote]
[quote=w1lson]aeciovc,
Exato, eu não consigo compartilhar os escopos de sessão e aplicação entre aplicações diferentes. Vou fazer alguns testes aqui.
Obrigado[/quote]
Compartilhar SESSION E APPLICATION não tem jeito mesmo…pq isso ja furaria a especificação JEE.
É possível sim compartilhar dados entre contextos diferentes, mas dai ja caimos em outro nível de programação…
Teríamos que estudar algo ai…ver se o container em uso possui alguma extensão proprietária para resolver isso…
[quote]Compartilhar SESSION E APPLICATION não tem jeito mesmo…pq isso ja furaria a especificação JEE.
É possível sim compartilhar dados entre contextos diferentes, mas dai ja caimos em outro nível de programação…
Teríamos que estudar algo ai…ver se o container em uso possui alguma extensão proprietária para resolver isso…[/quote]
mas… o SIGN SINGLE ON resolve esse problema??
se tiver algum exemplo pra nos mostrar! nunca tinha ouvido falar nesse recurso.
[quote=aeciovc][quote]Compartilhar SESSION E APPLICATION não tem jeito mesmo…pq isso ja furaria a especificação JEE.
É possível sim compartilhar dados entre contextos diferentes, mas dai ja caimos em outro nível de programação…
Teríamos que estudar algo ai…ver se o container em uso possui alguma extensão proprietária para resolver isso…[/quote]
mas… o SIGN SINGLE ON resolve esse problema??
se tiver algum exemplo pra nos mostrar! nunca tinha ouvido falar nesse recurso.
todo servidor Java implementa?[/quote]
Do tomcat sim…SSO alem propaga a credencial do usuário autenticado para diferentes contexto…vc consegue compartilhar, mas tem que quer fazer outras configurações…
Eu acredito que esse tipo de recurso esta fora da especificação JEE, ou seja, não é portavel para outros servidores,
Veja algo que vc tem que ponderar antes de escolher um situação arquitetural:
Se vc compartilhar estes dados via extensão proprietária do seu provedor de web container, vc acabara com uma solução não portável.
Se vc compartilhar usando a segunda opção mais clássica que é usar um SGDB, pode ter alguns complicadores de performance razoavelmente questionaveis, mas sua solução fica portável entre diferentes web containers. (Daria para fazer sim, usando um pool maior compartilhado entre os dois contextos…)
A escolha é sua…