Como fazer Autenticação com Struts?[RESOLVIDO]

15 respostas
joaosouza

Olá pessoal sou novo no struts e não sei como fazer um esquema de autenticação, ou seja, o sistema não deixar que usuários possam acessar outras páginas antes de passar pelo login. Já fiz isso no Mentawai, mas no Struts não tenho idéia de como fazer.

Alguém pode me dar um exemplo, por favor.

Abraços.

15 Respostas

saoj

O Struts nem deve ter isso!

Como vc faz “redirect after login” com Struts?

Provavelmente vc terá que fazer tudo na unha para autenticar com Struts.

Evite o Struts!

F

vc tem que tratar nas suas action.

guarda na sessao o usuario logado… e seu perfil, com isso vc resgata um pojo dessa informaçoes e verifica se o mesmo tem acesso, verdadeiro dispara para a acao normalmente senao para um tela de msg…

isso que falei sao seus forwards. ok

[]'s

diego_arruda

Eu indico você utilizar um filtro para isso, é assim que eu faço para qualquer aplicação WEB, pois é simples e funcional. Além de não deixar amarrado a frameworks. :smiley:

No caso, o filtro iria interceptar a chamada para a página, verificaria se o usuário está na sessão, se não estiver, joga para a página de login. :wink:

P

Para autenticação no nível de página, use os security-constraints que vc. coloca no próprio web.xml (cf post anterior).

Para controle no nível de conteúdo da página (p.ex, itens de menu ou blocos de conteúdo), use a EL e JSTL,ou um dos tags do pacote “logic”.

Outra taglib que pode te ajudar é o tiles, que possui suporte a especificar os roles aos quais o usuário deve pertencer para que determinado conteúdo seja exibido.

saoj

O homem já foi e voltou da lua, mas o Struts não oferece nada para facilitar a vida de quem tem que fazer autenticação ???

E redirect after login, como vc faz ???

E proteção de página x proteção de action, como vc faz ???

E autorização, como vc faz ???

joaosouza

Pois é Sérgio, não é nada fácil trabalhar com struts, sou iniciante em programação, conheci o menta e logo de cara consegui desenvolver meu primeiro sistema com o framework, e fiquei impressionado com sua facilidade e funcionalidade.
Tá aí Sérgio grandes problemas q tenho q resolver auenticação e autorização. Que vontade de usuar mtw:requiresAuthentication/ como filtro global no appManager, <mtw:hasAuthorization groups=""> para users e admins.
Mas vamos lá aos trancos e barrancos tentando a cada dia aprender um pouco mais.

saoj

No seu trabalho estão te obrigando a usar Struts?

joaosouza

Sim. Antes usavamos o Menta, antes da saída de um analista programador que comandava a equipe de desenvolvimento. Agora querem que seja usado o Struts por ser o mais utilizado no mercado.

saoj

O cara que ordenou isso provavelmente não deve ser o cara que está colocando a mão na massa.

Até porque não deve saber nem HTML…

(brincadeira, se o cara souber me desculpa… mas Struts é dose!)

mcruz

Sinceramente, eu gosto de struts… Acho que muitos dos frameworks existentes hoje devem muito a ele, apesar de existirem outros mais fáceis de usar (menta) ou mais bem estruturados (jsf).

joaosouza

Oi pessoal, consegui fazer o esquema de autorização q não estava conseguindo, segui abaixo o scriptlet q utilizei nas páginas do sistema.

<%
	if(session.getAttribute("usuario") == null) {	
	             out.print("<script>window.top.location.replace('login.jsp');</script>"); 
   		      out.flush();
	}
%>

Obrigado a todos pela atenção e paciência.

P

Acho que foi uma decisão razoável do Struts não fazer autenticação. A infra do servlet container já dá algumas alternativas que funcionam (BASIC/FORM) e vc. pode tb. usar certificados de cliente. Ter isto de forma ortogonal ao framework é uma “coisa boa”, NMO.

Se vc. quer dizer com isto ir para a página que o cara queria (protegida) e foi interceptado pelo login, o form-base resolve.

Via security-constraint declarativa no web.xml. De novo, acho que foi uma decisão correta não reinventar a roda.

No nível de caso de uso, que em Struts costumam mapear diretamente em Actions e, por tabela, em URIs diferentes, uso security-constraints.

No nível de dados, acaba sendo um problema da camada de serviços, mas o tiles pode exibir condicionalmente blocos em função dos roles do usuário autenticado pela infra-estrutura.

the_negao

joaosouza:
Oi pessoal, consegui fazer o esquema de autorização q não estava conseguindo, segui abaixo o scriptlet q utilizei nas páginas do sistema.

<%
	if(session.getAttribute("usuario") == null) {	
	             out.print("<script>window.top.location.replace('login.jsp');</script>"); 
   		      out.flush();
	}
%>

Obrigado a todos pela atenção e paciência.

Cara, só uma sugestão…
Se você irá utilizar o Struts, usa as taglibs então.

No lugar do scriptlet utiliza:

<logic:notPresent name=‘usuario’ scope=‘REQUEST ou SESSION’>
<logic:redirect page='PAGINA DE LOGIN/>
</logic:notPresent>

Dá uma olhada em: http://struts.apache.org/1.2.9/userGuide/index.html

joaosouza

Obrigado the_negao pela ajuda, ainda não conheço as tags do Struts, mas

sua ajuda foi fundamental para mim.

Obrigado mais uma vez.

J

O Struts nao tem isso.
De uma olhada em topicos Java Authentication and Authorization Service (JAAS)

Uma forma muito utilizada é por FORM

FORM /jsp/common/login.jsp /jsp/common/loginError.jsp

Tudo isso é o container responsavel. Assim que autenticado, faca o que o foliveira81 disse. Guarde numa sessao o usuario logado pois vc pode verificar algum dado do usuario bem como verificar se a sessao expirou (normalmente cria-se uma action pai para outras actions. Nessa action pai verifica se a sessao expirou).

Criado 6 de dezembro de 2006
Ultima resposta 6 de dez. de 2006
Respostas 15
Participantes 8