Este artigo é o segundo, de uma série, que falaremos sobre segurança
em aplicações Java↳Java42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) →, continuando com o Spring Security. Dúvidas e
críticas são bem-vindas.
Aplicações comerciais sempre necessitam de acesso ao banco de dados↳Banco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data →. Então, por que seria diferente criar uma segurança sem estar com as
informações contidas no banco de dados?
No artigo
anterior tivemos uma introdução de como usar o Spring Security
utilizando as configurações somente no XML. Neste artigo veremos como
criar a segurança utilizando o Spring Security e o banco de dados.
Preparando o banco de dados do exemplo
O banco de dados utilizado será o MySQL.
Você pode baixar a versão 5.1, utilizada no artigo, aqui.
Abra o terminal do MySQL com seu usuário e senha ROOT (aquela que
você configurou na instalação).
Crie o banco de dados e a tabela executando os seguintes comandos:
create database security;<br /><br />use security;<br /><br />CREATE TABLE users<br /><br />(<br /><br />username VARCHAR(15) NOT NULL,<br /><br />password VARCHAR(40),<br /><br />authority VARCHAR(15),<br /><br />PRIMARY KEY (username)<br /><br />);Insira um usuário assim:
<strong>INSERT INTO users VALUES('edson','integrator','ROLE_ADMIN');</strong>Podemos baixar o MySQL
clicando aqui, além da versão atual do driver JDBC, chamado de Connector/J
5.1. Baixe os arquivos, instale o MySQL, caso não o tenha em sua
máquina e descompacte o arquivo JAR, do qual iremos
precisar, que será:
mysql-connector-java-5.1.10-bin.jar
O projeto
Pegue o projeto criado no artigo
anterior, adicione a biblioteca JDBC do MySQL e também a biblioteca
JAR do Spring Framework:
org.springframework.jdbc-3.0.0.RELEASE.jar
O arquivo de configurações do Spring
No arquivo de configurações do Spring, altere como
mostrado na Listagem 1 a seguir:
Listagem 1 O arquivo
applicationContext.xml
<strong><?xml version="1.0" encoding="UTF-8"?><br /><beans:beans xmlns="http://www.springframework.org/schema/security"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xmlns:beans="http://www.springframework.org/schema/beans"<br />xsi:schemaLocation="http://www.springframework.org/schema/beans<br />http://www.springframework.org/schema/beans/spring-beans.xsd<br />http://www.springframework.org/schema/security<br />http://www.springframework.org/schema/security/spring-security-3.0.xsd"><br /><http auto-config="true" ><br /><form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=invalido"/><br /><intercept-url pattern="/admin/**" access="ROLE_ADMIN" /><br /></http><br /><authentication-manager><br /><authentication-provider><br /><jdbc-user-service data-source-ref="dataSource"<br />users-by-username-query="SELECT username, password, 'true' as enable FROM users WHERE username=?"<br />authorities-by-username-query="SELECT username, authority FROM users WHERE username=?"<br />/><br /></authentication-provider><br /></authentication-manager><br /><beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" ><br /><beans:property name="url" value="jdbc:mysql://localhost:3306/security" /><br /><beans:property name="driverClassName" value="com.mysql.jdbc.Driver" /><br /><beans:property name="username" value="root" /><br /><beans:property name="password" value="integrator" /><br /></beans:bean><br /></beans:beans><br /></strong>A mudança feita no arquivo applicationContext.xml,
visto na Listagem 1, com relação ao artigo
anterior, está na forma como vamos acessar o usuário,
senha e seu role. Alteramos o antigo elemento <user-service
/> por <jdbc-user-service />.
Em <jdbc-user-service />,
temos TRÊS atributos importantes: users-by-username-query
e authorities-by-username-query e data-source-ref.
O primeiro atributo possui uma query que deve buscar três informações: username,
password e um valor booleano chamado enable.
A tabela criada no banco de dados, vista na Figura 1,
possui três campos (username, password e
authority), mas não possui enable. Portanto, a
query deve simular este campo, informando que todos os cadastrados na
tabela estão habilitados:
SELECT username,
password, ‘true’ as enable FROM users WHERE username=?
Observe também que há uma condição WHERE na
cláusula SQL, para que o usuário seja filtrado no login e para que o
Spring Security se encarregue do resto, analisando se o usuário
transmitido e sua senha são similares ao existente no banco de dados.
Além de verificar se o usuário existe, o Spring
Security precisa saber se ele possui autorização para acessar
determinado local. O role, no caso, foi adicionado no terceiro campo da
tabela users, chamado de authority. O atributo authorities-by-username-query,
portanto, recebe uma query onde existe o usuário e seu role, sempre
filtrando pelo usuário:
SELECT username,
authority FROM users WHERE username=?
Atenção:
A query utilizada para o spring security precisa retornar os seguintes
nomes de colunas: username, password, enable
e authority.
No atributo data-source-ref
indicamos o data source necessário para se conectar ao banco de dados.
A conexão é feita pelo elemento <beans/>
no qual a classe utilizada é a org.springframework.jdbc.datasource.DriverManagerDataSource,
responsável por fazer a conexão com o banco de dados.
Logout, acesso negado e criptografia da senha
Depois de concluído o acesso à área restrita, temos
que efetuar o logout quando não interessa mais estar naquela área.
Também precisamos definir o que será apresentado
aos usuários que não possuem acesso a uma determinada área.
- Logout
Para fazer o logout de uma área restrita,
utilizamos o padrão para fazer isso, que é: /j_spring_security_logout.
Sua utilização será no arquivo /admin/index.jsp,
como por exemplo a adição de um link, como na Listagem 2.
Listagem 2 Adição do link para
efetuar logout da área restrita
<html><br />...<br /><body><br /><h2>Parabéns, você está logado!</h2><br /><hr /><br />Faça logout <a href="../j_spring_security_logout">clicando aqui</a>.<br /></body><br /></html>- Página com a mensagem de acesso negado
Caso tenhamos um usuário cadastrado válido, que não
possui permissão de acesso a uma determinada área, vemos uma página
padrão, como de costume, exibida pelo servidor.

Figura 3
Acesso negado a um usuário que não tem permissão a esta área
Para modificar essa página, podemos criar uma que será exibida em seu lugar, informando o usuário da falta de
permissão de acesso.
Sua configuração depois será no elemento <http
/>, do arquivo applicationContext.xml, com
o atributo access-denied-page. Abaixo vemos a página negado.jsp
como sendo a responsável por exibir uma mensagem personalizada, caso o
usuário entre em uma área não permitida.
<http auto-config="true" access-denied-page="/negado.jsp"><br />...<br /></http>- Criptografia de senha
O padrão para as senhas é de texto plano, como já
sabem. Entretanto, o Spring Security permite ler informações
criptografadas. Digamos que, na tabela de usuários,
tenhamos as senhas criptografadas em MD5. Teríamos que informar isso nas
configurações do Spring Security da seguinte forma:
<authentication-manager><br /><authentication-provider><br /><password-encoder hash="md5" /><br /><br /></authentication-provider><br /></authentication-manager>Nota:
No MySQL podemos adicionar uma string em MD5 simplesmente utilizando a
função de mesmo nome:
INSERT INTO users VALUES(‘usuario’,
MD5(‘senha’),’ROLE_’)
Até a próxima!






