Dev (Back & Front)ARTIGO

Solucionando ROLE_ SpringSecurity

Olá, pessoal!

No artigo de hoje, quero complementar dois artigos do Edson
Gonçalves sobre Spring Security:

Muitos desenvolvedores que
pretendem usar Spring Security (SS) em suas apps JEE sofrem para implementar
a regra de segurança quando já existem dados cadastrados no BD
e não se quer mudar as informações no BD para prefixar o ROLE_, que
é requerido pelo SS.

Vamos ver, então, como resolver esse problema, com o qual você pode se
deparar em sistema legado.

Lets
go…

Recomendado:

Iniciando

Vou levar em conta que
você já tem implementado o SS conforme este artigo do Edson Gonçalves. Caso contrário, leia o texto do
Gonçalves antes de continuar com o meu.

Mas, para refrescar
sua mente, lembre-se de que o role deve ter ROLE_ prefixado para que as
regras funcionem. Isso é default no SS. Há como alterar, porém
pesquisei muito e não consegui implementar. No fórum SS existem
várias sugestões, mas nenhuma delas foi mais eficiente que prefix o
ROLE_ com os dados trazido do BD.

Desenvolvendo

A solução é mais
simples que podemos imaginar, você vai precisar apenas prefix o
ROLE_. Para quem usa MySQL, temos a função concat(). Enfim, verifique na documentação do seu banco como
concatenar.

A seguir, mostramos com
o MySQL. É simples demais, confira:

authorities-by-username-query="SELECT<br /> username, concat('ROLE_',authority) FROM users where username = ? "

O código completo fica
assim:

< jdbc-user-service data-source-ref="dataSource"users-by-username-query="SELECT username, password, 'true' as <br />enable FROM users WHERE username=?" authorities-by-username-query="SELECT username, concat('ROLE_',authority) FROM<br /> users where username = ? "/>    

Outra dica é se a
coluna do usuario/password não for o que o Spring Security espera,
basta você fazer conforme o código a seguir:

<jdbc-user-service<br />data-source-ref="dataSource" users-by-username-query="SELECT<br />us.email as username, us.senha as password, 'true' as enable FROM usuario as us WHERE email=?" <br />authorities-by-username-query="SELECTus.email as username, us.tipo as authority FROM usuario us where email= ?"/> <br /></authentication-provider>	

Vou
ficando por aqui, espero que tenham gostado. Abraços e até o próximo!

é Bacharel em Sistemas de Informação e Especialista em Gestão e Estratégia de Negócios. Trabalha com TI desde 2003 e possui as certificações SCJP 5 e SCM. Trabalhou na IBM Brasil como Analista Programador Java, passou pelo laboratório da Enterprise Computing Lab (ECL) HP como Software Engineer, Ci&amp;T como Engenheiro de Software em projeto JEE. Tem experiência internacional em Índia, Dubai e Londres. Atualmente é cofundador da ITSLabs (www.itslabs.com.br), uma start-up focada na criação de produtos web e mobile para start-ups. Também é autor dos livros "Guia do Exame SCJP", "Guia Prático JEE com Frameworks" e "TDD na prática".

Ver perfil