Cícero Ednilson

Blog sobre Desenvolvimento de Softwares

Home » Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 10: Testando os acessos do sistema.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 10: Testando os acessos do sistema.

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×

Nessa parte do nosso tutorial vamos fazer um teste de acesso no nosso sistema que está sendo gerenciado pelo Spring Security.

Páginas do tutorial.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 1: Introdução.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 2: Criando os objetos do banco de dados.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 3: Montando o projeto com Spring Boot.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 4: Configurando o Spring Security.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 5: Criando Layout com Thymeleaf.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 6: Criando o cadastro de usuário.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 7: Criando a consulta de usuário.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 8: Excluindo um usuário cadastrado.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 9: Editando um usuário cadastrado.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 10: Testando os acessos do sistema.

Criando uma aplicação Web com Spring Boot, Thymeleaf, Material Designer Lite e Oracle – Parte 11: Executando a aplicação sem o Tomcat Embedded.

Cadastrando novos usuários.

Vamos cadastrar três usuários, um para cada perfil do no sistema, aqui vou cadastrar os usuários abaixo, mas você pode cadastrar outros se quiser.

Atenção: Devemos estar logado com o usuário cicero que é administrador do sistema.

Nome: João
Login: joao
Senha: 123456
Perfil: Administrador

Nome: Maria
Login: maria
Senha: 123456
Perfil: Usuários Comum

Nome: Ana
Login: ana
Senha: 123456
Perfil: Backoffice – Cadastros

Lembrando que as permissões e grupos estão cadastrados no banco de dados conforme mostra o resultado da nossa query abaixo.

1
2
3
4
5
6
7
8
9
SELECT  
  P.DS_PERMISSAO PERMISSAO,
  P.DS_DESCRICAO DESCRICAO_PERMISSAO,
  G.DS_NOME NOME_GRUPO,
  G.DS_DESCRICAO DESCRICAO_GRUPO
FROM
  TB_PERMISSAO P
INNER JOIN TB_PERMISSAO_X_GRUPO PG ON P.ID_PERMISSAO = PG.ID_PERMISSAO
INNER JOIN TB_GRUPO G ON G.ID_GRUPO = PG.ID_GRUPO;

Veja na imagem abaixo as permissões de cada grupo.

Lembrando também que quem faz o gerenciamento no nosso projeto é classe WebSecurityConfig que tem o código abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package br.com.ciceroednilson.webapp;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 
import br.com.ciceroednilson.webapp.service.UsuarioService;
 
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
	@Autowired
	private UsuarioService usuarioRepositoryImpl;
 
	/**
	 * REALIZA AS CONFIGURAÇÕES DE ACESSO
	 * */
	@Override
	protected void configure(HttpSecurity http) throws Exception {
 
 
		http.authorizeRequests()
			/*DETERMINA QUE PARA REALIZAR ESSA REQUEST PRECISA TER UMA DAS PERMISSÕES ABAIXO
		 	* EXEMPLO DA URL: http://localhost:8095/usuario/novoCadastro
		 	* VEJA QUE EM UM ITEM("hasRole('ADMIN')) NÃO ESTOU PASSANDO O PREFIXO ROLE_, ESSE PREFIXO NÃO É OBRIGATÓRIO 
		 	* QUANDO USAMOS o hasRole*/
			.antMatchers("/usuario/novoCadastro").access("hasRole('ADMIN') or hasRole('ROLE_CADASTROUSUARIO')")
			/*DETERMINA QUE PARA REALIZAR ESSA REQUEST PRECISA TER UMA DAS PERMISSÕES ABAIXO
			 * EXEMPLO DA URL: http://localhost:8095/usuario/consultar */
			.antMatchers("/usuario/consultar").access("hasRole('ADMIN') or hasRole('CONSULTAUSUARIO')")
			 /*DETERMINA QUE PARA ACESSAR A PÁGINA INICIAL DA APLICAÇÃO PRECISA ESTÁ AUTENTICADO*/
			.antMatchers("/home").authenticated()
			.anyRequest().authenticated()			
			.and()			
				.formLogin()
				 /*INFORMANDO O CAMINHO DA PÁGINA DE LOGIN, E SE O LOGIN FOR EFETUADO COM SUCESSO
				  *O USUÁRIO DEVE SER REDIRECIONADO PARA /home(http://localhost:8095/home)*/
				.loginPage("/").defaultSuccessUrl("/home",true)
				.permitAll() /*AQUI ESTAMOS INFORMANDO QUE TODOS TEM ACESSO A PÁGINA DE LOGIN*/
			.and()
			     /*AQUI ESTAMOS INFORMANDO QUE QUANDO FOR REDIRECIONADO PARA  O LINK http://localhost:8095/logout
			      *O USUÁRIO DEVE TER SUA SESSÃO FINALIZADA E REDIRECIONADO PARA A PÁGINA DE LOGIN */
				.logout()				
				.logoutSuccessUrl("/")
				.logoutUrl("/logout") 
				.permitAll();
 
 
		/*PÁGINA COM A MENSAGEM DE ACESSO NEGADO
		 *QUANDO O USUÁRIO NÃO TER UMA DETERMINADA PERMISSÃO DE ACESSO AO SISTEMA ELE VAI SER REDIRECIONADO
		 *PARA A URL ABAIXO */
		http.exceptionHandling().accessDeniedPage("/acessoNegado");
 
		/*AQUI ESTOU INFORMANDO QUE QUALQUER REQUEST TEM ACESSO AO DIRETÓRIO src/main/resources */
		http.authorizeRequests().antMatchers("/resources/**").permitAll().anyRequest().permitAll();
 
 
 
 
	}
 
 
	@Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
 
        /*INFORMA A CRIPTOGRAFIA QUE DEVE SER USADA PARA A SENHA DO USÁRIO*/				
		auth.userDetailsService(usuarioRepositoryImpl).passwordEncoder(new BCryptPasswordEncoder());
 
    }
	/*
	 * CRIPTOGRAFANDO A SENHA PARA TESTE
	public static void main(String[] args) {
 
		System.out.println(new BCryptPasswordEncoder().encode("123456"));
	}
	*/
}

Bom, voltando aos cadastros vamos incluir os novos registros.

Cadastrando o usuário João.

Cadastrando a usuária Maria.

Cadastrando a usuária Ana.

58

Depois podemos ver na página de consulta todos os usuários cadastrados.

Testando acessos dos usuários.

Agora vamos efetuar o Logout no nosso sistema e entrar com o usuário João, vamos ver que esse usuário tem acesso ao sistema completo, pois ele está com perfil de administrador como mostra as imagens abaixo.

Página de Cadastro.

Página de Consulta.

Vamos efetuar o Logout novamente e entrar com a usuária Maria, depois vamos clicar no menu Cadastro e então vamos ver a página abaixo, isso acontece por que a Maria não tem o perfil para cadastrar um novo usuário.

Agora se a Maria acessar a página de consulta ele pode visualizar normalmente, pois o seu perfil tem acesso a essa funcionalidade do sistema.

Vamos efetuar o Logout novamente e agora vamos acessar o sistema com a usuária Ana, quando essa usuária tenta acessar o menu Cadastro ela consegue visualizar normalmente, pois o seu perfil tem acesso a essas funcionalidade.

Agora se a usuária Ana tentar acessar a página de consulta ela vai visualizar a página abaixo, pois o seu perfil não permiti ter acesso a essa funcionalidade do sistema.

Verificando os registros cadastrados.

Com a query abaixo podemos ver os usuários que cadastramos no banco de dados.

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  U.ID_USUARIO,
  U.DS_NOME,
  U.DS_LOGIN,
  U.DS_SENHA,
  U.FL_ATIVO,
  G.DS_NOME,
  G.DS_DESCRICAO
FROM
  TB_USUARIO U
INNER JOIN TB_USUARIO_X_GRUPO UG ON U.ID_USUARIO = UG.ID_USUARIO
INNER JOIN TB_GRUPO G ON UG.ID_GRUPO = G.ID_GRUPO

Veja na imagem abaixo os nossos usuários cadastrados no banco de dados.

Na próxima parte do nosso tutorial vamos aprender a rodar a nossa aplicação em um Tomcat externo, até agora usamos o Tomcat Embed que já vem no Spring Boot, até a próxima.

Comentários

Name of author

Name: ciceroednilson@gmail.com

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×