Back-end de autenticação do projeto B2VN utilizando Java 11, Spring Boot, Spring Security, OAuth2.0, Spring Cloud OpenFeign, QueryDSL e PostgreSQL 11.
Para o desenvolvimento, você precisará apenas do JAVA instalado em seu ambiente de trabalho.
O Java é realmente fácil de instalar. Você poderá executar o seguinte comando após o procedimento de instalação abaixo.
$ java -version
java version "11.0.5"
$ git clone https://github.com/vhnegrisoli/b2vn-radar-api.git
$ cd b2vn-radar-api
$ mvn clean install
Na raiz da aplicação:
$ mvn spring-boot:run
ou
$ cd /target
$ java -jar b2vn-radar-api.jar
Para começar, como são microsserviços, é necessário ter todos os projetos.
$ git clone https://github.com/vhnegrisoli/b2vn-auth-api.git
$ git clone https://github.com/vhnegrisoli/b2vn-radar-api.git
$ git clone https://github.com/Noninus/b2vn-front.git
$ docker network create b2vn
$ docker image build -t b2vn-auth-api .
$ docker image build -t b2vn-radar-api .
$ docker image build -t b2vn-front .
$ docker container run --network b2vn --name auth -p 8080:8080 -d b2vn-auth-api
$ docker container run --network b2vn --name radar -p 8081:8081 -d b2vn-radar-api
$ docker container run --network b2vn --name front -p 3000:80 b2vn-front
$ docker pull postgres
$ docker pull dpage/pgadmin4
$ docker run --name b2vn-db --network b2vn -e "POSTGRES_PASSWORD=b2vn-auth" -p 5432:5432 -v C:\db -d postgres
$ docker run --name pgadmin4 --network b2vn -p 15432:80 -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=b2vn-auth" -d dpage/pgadmin4]
Acesso em: localhost:15432
host: b2vn-db
port: 5432
db: postgres
username: postgres
password: b2vn-auth
CREATE DATABASE b2vn
WITH
OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
CREATE TABLE public.log (
id int4 NOT NULL,
usuario_id int4 NOT NULL,
usuario_nome varchar(120) NOT NULL,
usuario_email varchar(120) NOT NULL,
usuario_permissao varchar(120) NOT NULL,
usuario_descricao varchar(120) NOT NULL,
tipo_operacao varchar(15) NOT NULL,
data_acesso timestamp NOT NULL,
metodo varchar(10) NOT NULL,
url_acessada varchar(255) NOT NULL,
servico_nome varchar(20) NOT NULL,
servico_descricao varchar(20) NOT NULL,
CONSTRAINT log_pkey PRIMARY KEY (id)
);
CREATE TABLE public.permissao (
id int4 NOT NULL,
descricao varchar(255) NOT NULL,
codigo varchar(10) NULL,
rate_limit int4 NULL,
CONSTRAINT permissao_pkey PRIMARY KEY (id)
);
CREATE TABLE public.usuario (
id int4 NOT NULL,
cpf varchar(14) NULL,
data_cadastro timestamp NOT NULL,
email varchar(255) NOT NULL,
nome varchar(120) NOT NULL,
senha varchar(255) NOT NULL,
ultimo_acesso timestamp NOT NULL,
fk_permissao int4 NOT NULL,
CONSTRAINT usuario_pkey PRIMARY KEY (id),
CONSTRAINT fkqa04ym7nxtsl5oyyw205c4l2q FOREIGN KEY (fk_permissao) REFERENCES permissao(id)
);
INSERT INTO public.permissao (id,descricao,codigo,rate_limit) VALUES
(1,'Administrador','ADMIN',5)
,(2,'Usuário','USER',2)
;
INSERT INTO public.usuario (id,cpf,data_cadastro,email,nome,senha,ultimo_acesso,fk_permissao) VALUES
(1,'103.324.589-54','2019-09-19 00:00:00.000','[email protected]','Usuário Administrador','$2a$10$NL.sPHyZeR/4Iu8hgbbWSej6qe89F96vwXLnagIDROvS8OShM5ase','2019-11-17 21:21:26.928',1);
CREATE SEQUENCE public.hibernate_sequence
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 10038
CACHE 1
NO CYCLE;
- Paginação nas consultas para melhoras a eficiência
- Token de segurança (Oauth2)
- Log para controle de acesso dos usuários
- Sistema RBAC (Usuários, administradores, configurações de acesso, permissões)
- Rate Limiting configurável e baseado no RBAC
- API baseada em microsserviços: Autenticação, Radares, Trajetos e Controles
- Saídas em JSON e XML
- Exportação para CSV
- Visualização dos radares por lote no Mapa
- Visualização das consultas em formato de tabelas paginadas
A arquitetura utilizada é a REST, um protocolo utilizado na integração de Web Services, e estes, são soluções utilizadas para integração e comunicação entre sistemas. Como uma abstração da arquitetura HTTP
Microsserviços são uma abordagem de arquitetura para a criação de aplicações. O que diferencia a arquitetura de microsserviços das abordagens monolíticas tradicionais é como ela decompõe a aplicação por funções básicas. Cada função é denominada um serviço e pode ser criada e implantada de maneira independente. Isso significa que cada serviço individual pode funcionar ou falhar sem comprometer os demais.
Portanto, um microsserviço é uma função essencial de uma aplicação e é executado independentemente dos outros serviços. Nós escolhemos sua utilização pois torna o projeto mais seguro e eficaz na questão da escalabilidade do mesmo.
O Diagrama de Caso de Uso descreve as funcionalidades propostas pelo PhiloPDV e é uma excelente ferramenta para o levantamento dos requisitos funcionais do sistema.interações com elementos externos e entre si.
O Diagrama de Implantação descreve a implementação física de informações geradas pelo programa de software em componentes de hardware.
http://localhost:8080/swagger-ui.html
http://localhost:8081/swagger-ui.html
O JMeter é uma ferramenta desenvolvida totalmente em Java pelo grupo Apache com o objetivo de realizar testes de carga e stress, a seguir faço um roteiro para realização de um teste de stress simples.
1- Primeiramente devemos baixar o JMeter 5.2, para isso clique aqui.
2- Descompactar o conteúdo do arquivo em uma pasta de sua preferência.
3- Inicie a ferramenta executando o jar $pastajmeter/bin/ApacheJMeter.jar.
- Spring Boot é o framework do projeto.
- Spring Security é uma estrutura que fornece autenticação, autorização e outros recursos de segurança para aplicativos corporativos
- Oauth2 é o protocolo para autorização.
- QueryDSL é utilizado para simplificação de consultas ao banco de dados.
- Spring Data JPA implementa facilmente o JPA.
- PostgreSQL como banco de dados.
- OpenFeign para realizar os feign clients.
- Spring Cloud para ferramentas voltadas a microsserviços.
- React Map GL é utilizado para visualização do mapa.
- React é usado para a interface do usuário.
- axios é utilizado para o client HTTP.
- sweetalert2 é utilizado para os alertas e mensagens ao usuário.
- react-table para a visualizações dos dados nas tabelas.
- react-chartjs-2 utilizado para gerar gráficos dinâmicos.
Nessa seção é possível visualizar algumas interfaces e algumas funcionalidades já implementadas no site (front-end). Na API é possível executar serviços de comparações, com visualização gráfica, e outras relações.
É possível navegar no mapa e escolher um radar para ver mais informações.
Ao clicar sobre um radar, aparecerá um popup indicando os parâmetros do mesmo.
Nessa tela é possível ver todos os usuários e também conceder a permissão de administrador pelo CPF.
Nessa seção é possível visualizar algumas URLs desenvovildas do sistema e mostrar, seu retorno e suas exeções.
- Rafael Nonino Filho - Desenvolvedor Front-end
- Victor Hugo Negrisoli - Desenvolvedor Back-end
Este projeto está licenciado sob a licença MIT(Instituto de Tecnologia de Massachusetts).
Para mais informações consulte nossa