[CONTRIBUIÇÃO] VRaptor 3 - Plug-in para Controlar Acesso.  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Bom pessoal, to aqui disponibilizando uma biblioteca que fiz, para controlar Acesso junto ao VRaptor.

Primeiro lugar os arquivos, e em seguida as explicações ...

LIB => http://tomazlavieri.com.br/downloads/access4VRaptor-0.0.1.jar (36 kb o jar contém o srouce)
BLANK PROJECT => http://tomazlavieri.com.br/downloads/access4VRaptor-blank-project.zip (5.6 mb)
JavaDoc => http://tomazlavieri.com.br/docs/access4vraptor/

Obs.: tente acessar no blank project http://localhost:8080/vraptor-blank-project/logica-fechada

Como funciona ?
Tentei não amarrar o controle de acesso ao restante da logica, então ela funciona basicamente através de um componente de sessão que deve ser implementado usando-se a interface LoginSession

Esta é a inerface a qual o sistema conversa, e funciona de uma forma simples, ela só precisa informar se o usuário esta logado, e dado um recurso, se o usuário pode ou não abrir aquele recurso.



---------------

Mas o que interceptar ? só de usar essa lib o sistema todo é travado ? a resposta é não!

Apenas Controles (Recursos) anotados com @ControlledResrouce, e neste caso todas as suas lógicas passam a ser também controlada pelo plug-in.
Obs.: @ControlledResource substitu a anotação @Resource, do VRaptor, e portanto a anotação do VRaptor deve ser removida.

Ou lógicas anotadas com @ControlledLogic e neste caso o restanto do recurso pode ser ou não de acesso livre.

----------------

Para onde vão os usuários que não estiverem logados ? e tentarem acessar um Lógica Controlada ??
1) O plug-in irá procuar primeiro por uma lógica, dentro do mesmo recurso, anotado com @LoginLogic
2) Caso não encontre o 1° o plug-in irá procurar por uma lógica anotada com @LogicLogin(defaultFor=DefaultLoginSession.class) caso o atributo sessionClass da anotação do @ControlledResource não esteja presente, ou então procurará pela class definida no sessionClass.
3) Caso não encontre nenhuma das duas opções acima, a lógica será transferida para error 403 (acesso negado).

E caso o usuário esteja logado, mas o método hasAcess(ResrouceMethod) retorn false ? neste caso o plug-in executará uma lógica semelhante a de cima, porem levando em conta a anotação @DeniedLogic
1) procura por @DeniedLogic dentro do mesmo recurso
2) procura por @DeniedLogic definido por padrão para a LoginSession definida no atributo sessionClass.
3) envia um error 403 (acesso negado).

---------------------------

Bom muito ja foi dito, mas como o hasAcess(ResrouceMethod) deve ser implementado ?
R: isso fica a cargo de cada implementação, e este é ponto onde o sistema fica mais solto.

Mas existe alguma implementação padrão ou algo parecido ?
R: sim! existe o AbstractRoleLogin esta classe fornece um suporte a mais algumas anotações:
- @Roles esta anotação pode definir um conjunto de papais que tem acesso a uma lógica/recurso, ou que são negados a acessar uma lógica/recurso.
- @SubRoles e @SubRole estas duas anotações são usada para definir no componente de sessão subclasse do AbstractRoleLogin como uma role contem um grupo de outras roles, você pode encontrar um exemplo no Blank Project, na classe LoginInfo

A forma como o login é feito, e qual é a role do usuário logado é definido por que extende essa classe abstrata, porem ela cuida sozinha de como resolver as roles anotadas nos recursos.

------------------------

Gostei desse pacote, e queria testar, o que preciso fazer ? apenas baixara LIB e começar a usar ?? ou sou obrigado a inicia do blank project ?
R: Não. para usar em um projeto você precisa seguir poucos passos

1°) Fazer o download da lib, e colocar dentro de WEB-INF/lib
2°) alterar o arquivo web.xml e adicionar o pacote referente ao plug-ing conforme abaixo

3°) Implementar um LoginSession, de preferencia o DefaultLoginSession que é usado como padrão de todo o projeto.
4°) Quem não tem o último snapshot do vraptor, precisa usar uma classe de FIX, para corrigir um problema que não irá aparecer a partir da versão 3.1.2, esta classe é a FixedObjectResult, e deve ser adicionada dentro do seu projeto, afim de ser enchergada pelo VRpator, segue código => http://pastebin.com/AydRye0n

A partir dai, é só anotar com @ControlledResource no lugar de @Resource, nas lógicas que quiser ter controle de acesso.

---------------------

Para melhor entendimento, verifique o blank project. experimentem, comentem,

Conteúdo do BLANK PROJECT:
Classes:
- FixedObjectResult
- LoginInfo
- RestritoController
- IndexController

Att, Tomaz Lavieri

This message was edited 2 times. Last update was at 09/03/2010 23:34:32


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
softwork
JavaBaby
[Avatar]

Membro desde: 15/04/2006 23:22:33
Mensagens: 90
Localização: São Paulo - SP - Brasil
Offline

Ótima iniciativa, parabéns amigo!

Dennys S. Sobrinho

Analista e Desenvolvedor Sênior
Chefe adjunto do Centro de Informática - FAESP-SENAR/SP
http://www.faespsenar.com.br
(11) 3258-7233 Ramal 174

Plante, cultive e colha a Paz.
[WWW] [MSN]
a.moraissoares
JavaChild
[Avatar]

Membro desde: 07/04/2009 12:53:08
Mensagens: 113
Offline

boa demais da conta. Vou testar logo que chegar em casa, na minha app que estou começando agora, e já ia bater cabeça pra controlar acesso da moçada! Tá de parabéns. Assim que eu testar e fazer funcionar direitinho, eu posto os parabéns!
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2673
Localização: Porto Alegre
Offline

Pelo que eu contei essa já é a terceira contribuição de plugin ao vraptor. Bom saber que o vraptor tem evoluído assim de forma a ver o pessoal investindo parte do seu tempo criando essas ferramentas para facilitar a vida de quem desenvolve com o vraptor.

Parabéns Lavieri. Embora eu não use tua implementação, pois uso JAAS, creio que muita gente aqui irá usar.

Abraços

This message was edited 1 time. Last update was at 18/03/2010 12:02:16

Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Quando chegar em casa comento os elogios da galera, e dou um lida completa no post, de antemao, muito obrigado a todos que dao forca..

Preparando a versao 0.0.2, previsto para proxima versao
- Component LoginFlow, com o metodo "retrieveFlow(result)", que vai recuperar o caminho do fluxo, antes do plug-in interceptar e encaminhar para pagina de login, util para quando a pagina de login e' so um step-and-go, de atutenticacao, e em seguida quer se retornar para onde o usuario estava.

a ideia e'


mais explicacoes quando estiver pronto

This message was edited 4 times. Last update was at 23/03/2010 11:34:17


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Bom, não postei o novo pack ontem, pois ainda tem um probleminha para resolver (A Serialização de métodos dentro da sessão)

Vou resolver hoje a noite quando chegar em casa.
As funcionalidades propostas acima, ja estão funcionando, com algumas melhoras, porem o no restart do servidor (quando ele serializa e dezserializa) um objeto que guardo dentro da seção não pode ser serialziando acabando que gera exceções, o programa continua funcionanado, e se recupera do problema, porem eu vou corrigir a serializada da calsse LoginFlow

Obs.: o problema é que este objeto guarda os métodos das lógicas interceptados, para posterior recuperação, o objetos do tipo Method, não aceitam serialização.

Agora o projeto se encontra hospedado no google code: http://code.google.com/p/access4vraptor/

o SRC dele pode ser acessado via SVN, ou via browser => SRC

A versão atual que esta no site é a 0.0.2b, infelismente neste SVN não há registro da versão 0.0.1, vou colocar o JAR das duas versões assim que chegar em casa


A forma de utilização ficou mais ou menos assim:


This message was edited 5 times. Last update was at 25/03/2010 07:59:25


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Problema de serialização corrigido. a versão ja se encontra no site do projeto.

http://code.google.com/p/access4vraptor/

link direto para o jar: http://access4vraptor.googlecode.com/files/access4VRaptor-0.0.3.jar

This message was edited 1 time. Last update was at 26/03/2010 02:43:58


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
softwork
JavaBaby
[Avatar]

Membro desde: 15/04/2006 23:22:33
Mensagens: 90
Localização: São Paulo - SP - Brasil
Offline

Parabéns amigo!
Gostei muito do código e sua funcionalidade.

Obrigado pela contribuição.

Dennys S. Sobrinho

Analista e Desenvolvedor Sênior
Chefe adjunto do Centro de Informática - FAESP-SENAR/SP
http://www.faespsenar.com.br
(11) 3258-7233 Ramal 174

Plante, cultive e colha a Paz.
[WWW] [MSN]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

softwork wrote:Parabéns amigo!
Gostei muito do código e sua funcionalidade.

Obrigado pela contribuição.

Opa softwork! .... vlw ai os elogios ... me fala uma coisa vc chegou a usar e testar o plug-in ??

t+

This message was edited 1 time. Last update was at 25/03/2010 09:41:57


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 5632
Offline

Lavieri, não quer colocar esse plugin no vraptor-contrib, por favor?

https://github.com/caelum/vraptor-contrib/

pode ser em outro repositório do git, daí eu adiciono como submodulos

--
Caelum
www.caelum.com.br

 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team