Spring security 6
Fui apresentado ao spring pelo Bruno Pedroso, não sabia muito bem com o que estava mexendo, mas utilizei na época o spring apenas para injetar alguns beans e etc. Continuei com o spring por vários projetos, alguns pessoais, outros da empresa, e hoje posso dizer que se tiver alguma solução para o meu problema que se integre ao spring ou que já exista nele eu não penso duas vezes em utilizar.
Nessa próxima sprint do eplamtax precisaremos de alguns recursos de segurança, e o que iremos utilizar? Spring security é claro!
O Spring security (SS) é um framework Java que provê avançados recursos de autenticação e autorização, além de outras coisas. Muitas pessoas desconhecem mas esse projeto começou em 2003 com o Acegi Security, mas o projeto foi incorporado ao spring e teve seu nome mudado.
Este será um blog técnico, vejamos então como configurar o spring security, para isso já devemos estar com o spring configurado. Para quem utiliza maven devemos configurar o pom.xml com as seguintes dependências:

Feito isso devemos configurar o filtro do spring security (SS) no web.xml. Lembrando que os filtros são executados na ordem em que estão configurados no Deployment Descriptor(DD), logo para que você consiga interceptar todos os requests é necessário colocar o filtro do SS como o 1° filtro.

O spring é totalmente configurável, criamos os beans e etc no arquivo application-Context.xml, mas para manter as coisas organizadas geralmente separamos em vários arquivos. Então vamos criar um arquivo application-Context-security.xml e importá-lo no application-Context.

Vamos utilizar o auto-config do SS, para isso devemos utilizar a seguinte tag no application-context-security:

Para que o SS tenha acesso aos dados do usuário nós iremos criar uma ponte entre o framework e nossa base de dados, o SS possui as interfaces UserDetail e UserDetailService que deveremos implementar em nossos beans. Vejamos como ficaria um bean que implementasse UserDetail:

A interface UserDetail possui as seguintes assinaturas:

Note que nosso objeto não possui atributo username nem authorities, pois esses dados estão em outra base de dados da qual Pessoa é carregada. O método getAuthorities retorna um array de GrantedAuthority, esta interface possui apenas um método, getAuthority, que retorna uma string. Uma GrantedAuthority, como o nome bem diz, é uma autorização concedida aquele usuário.
O framework possui uma classe GrantedAuthorityImpl, que possui um construtor com uma String, veja nossa implementação do método getAuthorities:

Depois de criada a classe que implementa UserDetais devemos implementar a UserDetailService:

A interface UserDetailService possui apenas um método:

Esse método será utilizado para carregar seu objeto de usuário pelo SS. Devemos informar ao Spring Security (SS) a classe que implementa o UserDetaiService, as configurações no application-Context-security ficaram da seguinte forma:

Com isso nós já temos o SS instalado e configurado. Para utilizar as taglibs do framework devemos adicionar mais uma dependência no pom.xml:

E depois:

Nosso application-context-security:

O SS permite que a autenticação seja feita pelo LDAP e permite customizações em toda a sua arquitetura, é um framework bem flexível, mas isso já é assunto para outro blog.
o/
Tenho utilizado o Spring Security há muito tempo, desde que ainda se chamada Acegui Security, sem dúvida, uma ferramenta muito poderosa e completa. Altamente recomendado!
Tenho utilizado o Spring Security há muito tempo, desde que ainda se chamada Acegui Security, sem dúvida, uma ferramenta muito poderosa e completa. Altamente recomendado!
Boa mlk!!!
Falae Tulio,
Primeiramente excelente artigo… Cara aplicando as configuracoes aqui postadas, a minha validacao funcionou, porem somente pra minhas jsp’s, minhas actions continuam desprotegidas!!! teria como vc me dar um bizu nisso ?
Abs!!!
Leo
E ae Leonardo, provavelmente você mapeou o filtro do spring security antes do struts, da uma conferida no mapeamento dos seus filtros.
Teria esses fontes ? pois não conseguir usar aqui !
web2ajax@gmail.com
Grande Post !