| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 13:24:43
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
1 - Introdução
Pra começar, o Jaas é uma implementação do padrão de segurança do j2ee.
Serve para controlar permissões de vários tipos: arquivos, diretórios, conteúdos, url's...
Para web, basta seguir os passos abaixo.
Quando usamos este padrão de segurança,
devemos estar cientes que este modulo está a nível de servidor de aplicação e não de aplicação,
ou seja, este modulo de autenticação será executado pelo servidor de aplicação,
antes mesmo de acessar a aplicação.
2 - Criação do modulo de login
Existe uma interface definida no j2ee que é usada para efetuar o login.
javax.security.auth.spi.LoginModule
Devemos implementá-la, conforme o exemplo abaixo.
O método initialize() é invocado sempre que uma nova autenticação é solicitada.
São passados como parametros o Subject, CallbackHandler, o mapa de objetos compartilhados
e o mapa de opções do login.config (sessão 3). O mais importante destes parametros para nós será o options,
pois nele receberemos os parametros de sql e datasource.
O método login() é invocado quando é enviado os dados (login e senha) de autenticação.
O método commit() é invocado quando o login() obtém sucesso.
O método abort() é invocado quando o login() não obtém sucesso.
O método logout() é invocado quando o usuário desloga da aplicação.
Agora, com as classes de login criadas, devemos gerar um jar e adicionar no classpath do servidor de aplicação.
No tomcat, basta colocar o jar em $CATALINA_HOME/common/lib.
Obs.: Principal é a interface usada para acessar o login (no caso da classe User) e a role (no caso da classe Role)
3- Configurações
Devemos agora configurar o nosso login.
Para que o servidor de aplicação use nosso modulo de login, devemos criar um arquivo (login.config) contendo as informações necessárias para carregar o modulo.
Ele deve ter o seguinte formato:
O flag requerid, indica se a autenticação naquela classe é requerida.
Podemos ter vários validadores de login (classe LoginModule) para o mesmo modulo de login.
Caso queira-se autenticar no banco e no ldap, basta implementar o LoginModule pra cada um e colocar no login.config.
No nosso exemplo ficaria assim:
Apartir de agora, toda vez que iniciarmos o servidor de aplicação, será necessário informar o arquivo de configuração, desta forma:
-Djava.security.auth.login.config=$CATALINA_HOME/conf/login.config
Até aqui, o servidor de aplicação já estará configurado com nosso modulo.
4- Segurança na aplicação
Agora temos que adicionar a segurança em nossa aplicação.
Para que nossa aplicação faça uso do modulo de segurança, devemos adicionar um realm no contexto.
Este parametro appName se refere ao NOME_DO_MODULO.
Agora basta adicionar as restrições da nossa aplicação. Isto é feito no web.xml. Veja abaixo:
Repare que a url /cliente.do possue duas roles, será avaliado se o usuario posue alguma delas.
Repare tambem que foi criado uma role LOGADO. Ela serve pra validar aquelas url's que basta que o usuario esteje logado.
Agora só falta criar o formulário de login.
Crie um arquivo para o formulario (login.jsp). Observe abaixo o exemplo.
Sempre coloque os nomes dos campos de login e senha como j_username e j_password.
Este j_security_check é apenas para que o servidor de aplicação identifique que se trata de uma tentativa de login.
Crie tambem um arquivo de erro (erro.jsp).
Para concluir, adicione mais esta configurão no web.xml. Trata-se do mapeamento dos arquivos login.jsp e erro.jsp
Pronto!
Quando for acessado a url /cliente.do, o servidor de aplicação irá identificar que é necessário autenticação,
se não foi feita anteriromente ele irá redirecionar para a pagina de login até que o usuario seja autenticado.
5- Conclusão
O jaas é um pouco limitado e cheio de restrições, mas para controlar segurança e autenticação é o mais recomendado.
Caso precise de adicionar regras na autenticação, como por exemplo expiração de senha,
use um filter só para ver se o usuario está com a senha expirada.
Caso precise do usuario autenticado e/ou a(s) role(s) em um Servlet, Action... basta usar os metodos:
Caso tenham duvidas entrem em contato.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 13:30:43
|
cecaldas
Java Ninja
Membro desde: 01/03/2004 13:17:19
Mensagens: 264
Offline
|
Porque você não escreveu um artigo no formato do guj?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 13:34:19
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
é q não sei como fazer isso...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 13:38:31
|
*Nino*
Java Ninja
Membro desde: 20/07/2006 12:29:36
Mensagens: 269
Offline
|
concordo no formato guj... iai fica loco...
tem meu voto
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 13:44:25
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Apenas uma opinião pessoal. Vc não acha JAAS uma bazuka para matar uma mosca?
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 13:52:36
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
mate-a bem matado...
o bom do jaas é que vc pode programar suas actions, servlets, controllers... sem se preocupar com a segurança de acesso. basta só mapear as restrições.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 14:05:15
|
brunohansen
JavaEvangelist
![[Avatar]](/images/avatar/1e0feeaff84a19bf3936e693311fa66d.jpg)
Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline
|
saoj wrote:
Apenas uma opinião pessoal. Vc não acha JAAS uma bazuka para matar uma mosca?
Como vc faz sem os JAAS?
Eu estou utilizando proxy.
So estou perguntando pq ainda n~]ao vi nenhuma aplicação saudavel de segurança.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 14:52:16
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
A segurança pode ser controlada por um filtro que intercepta actions e/ou páginas.
No caso das páginas tb pode ser feita por tags.
Dá uma olhada aqui:
http://www.mentaframework.org/authentication.jsp
http://www.mentaframework.org/authorization.jsp
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 15:36:59
|
fviana
JavaChild
![[Avatar]](/images/avatar/58f1e2bfc0c0c182f1afdab7cae02402.png)
Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline
|
prefiro o padrão j2ee para segurança, visto que posso usar este mesmo modulo em qualquer plataforma, web, desktop... com independencia, inclusive sobre outras frameworks, como spring, struts, mentawai, webwork... isto porque a segurança do jaas está a nivel de servidor de aplicação e nao restritamente à aplicação.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 16:51:05
|
mutano
JavaChild
![[Avatar]](/images/avatar/6425d167c06fe773378b10b546b6e923.jpg)
Membro desde: 02/08/2006 16:07:54
Mensagens: 127
Localização: Santa Cruz do Sul - RS
Offline
|
E no caso de não poder usar o Mentawai? Uma solução padrão que todos os app. servers devem (ou pelo menos deveriam) implementar pode ser muito útil.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 16:57:38
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Uma solução padrão que todos os app. servers devem (ou pelo menos deveriam) implementar pode ser muito útil.
Sim. Bem-vindo ao EJB! Divirta-se.
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 17:26:30
|
fabio.patricio
GUJ Master
Membro desde: 04/01/2004 02:51:33
Mensagens: 1512
Localização: Porto Alegre - RS
Offline
|
saoj wrote:
Uma solução padrão que todos os app. servers devem (ou pelo menos deveriam) implementar pode ser muito útil.
Sim. Bem-vindo ao EJB! Divirta-se.
Sergio,
Mas JAAS != EJB.
]['s
|
Fabio Patricio
http://blog.wansoft.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 20:42:58
|
duardor
Virtual Machine Man
![[Avatar]](/images/avatar/18d8042386b79e2c279fd162df0205c8.jpg)
Membro desde: 04/12/2002 16:26:48
Mensagens: 556
Localização: BRAZIL
Offline
|
Mais um pro JAAS... Servidor que presta implementa SSO mas para isso tem q tah usando o JAAS... Por isso prefiro JAAS... E uma coisa que vc faz uma vez e eskece...
|
Eduardo Rodrigues
Belo Horizonte - MG |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/08/2006 21:51:24
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Mais um pro JAAS... Servidor que presta implementa SSO mas para isso tem q tah usando o JAAS... Por isso prefiro JAAS... E uma coisa que vc faz uma vez e eskece...
Tudo depois de feito fica fácil. De novo isso é uma questão de gosto pessoal. Eu particularmente achei o tutorial extenso, não por má-qualidade do tutorial, que por sinal está excelente pois entendi tudo, mas pela complexidade do JAAS.
E como ele suporta autorização de apenas um pedaço dentro da página? E como ele suporta redirecionamento depois do login? Deve suportar... Outro tutorial?
Acho que a tendencia atual é ir contra tudo que não é simples. Se um conta-gotas mata a mosca então use o conta-gotas e não a bazuka. JAAS e EJB já tiveram seu momento. Bom... Minha humilde opinião... Vide a hype de RoR e tirem suas conclusões...
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/08/2006 01:16:22
|
Gerson
JavaChild
![[Avatar]](/images/avatar/ccb1d45fb76f7c5a0bf619f979c6cf36.jpg)
Membro desde: 26/01/2003 19:48:37
Mensagens: 113
Localização: São Paulo
Offline
|
Conclusão retirada do livro 'Java Development with Spring Framework', na parte que fala sobre Acegi Security, logo depois de mostrar as vantagens do uso do JAAS:
"Certainly JAAS is an important standard when developing applications intended for a limited privilege execution environment, such as an applet. However, unless web and EJB container support for JAAS greatly improves, it is unlikely to prove practical for efficiently developing portable, secure enterprise applications."
Quem não tem o livro, achei um pdf perdido no google, nesse endereço:
http://searchappsecurity.techtarget.com/searchAppSecurity/downloads/Spring_Framework_ch10.pdf
Para quem não conhece direito JAAS, é interessante de se ler, e principalmente saber quando se deve usar isso. Sabendo usar quando necessário, não há mal nenhum. O problema é usar para "matar uma mosca", como já disseram...
|
---
Gerson K. Motoyama
(SCJA, SCJP, SCWCD, SCBCD, SCEA-I) |
|
|
 |
|
|