Serviço destinado ao módulo criminal do PJe.

1. Quick start

Restaurar uma base limpa
$ psql -U postgres -h localhost -d criminal < "./src/main/resources/db/base/criminalV1.sql"
O banco do criminal dever ter enconding UTF-8
Clonar o repositório
$ git clone git@git.cnj.jus.br:pje2/pje2-servicos/criminal.git
Compilar o projeto usando maven
$ mvn clean package
Executar a aplicação
$ java -jar target/crimnal*.jar

2. Tecnologias empregadas

O serviço criminal foi construído com SpringBoot 2. Este serviço fornece API para manipulação e recuperação de seus recursos utilizando REST. Possui banco de dados relacional com parte das informações armazenadas em conceito NOSQL.

Utiliza o broker de mensagens RabbitMQ para consumir mensagens da exchange do PJe (pje.exchange).

2.1. Linguagem de programação

Java versão 8.

2.2. Framework(s)

SpringBoot 2.

2.3. Armazenamento dos dados

Banco relacional PostgreSQL. Parte das informação são amrazenada em JSONB.

2.4. Outros temas

Os logs da aplicação podem ser enviados à um serviço REDIS para que seja consumido pelo Logstash e indexado no ElasticSearch.

Os logs de auditoria da aplicação estão sendo armazenados na tecnologia Envers. Possui demanda para migração deste método de auditoria, de modo que os logs sejam indexados no elasticsearch.

3. Visão arquitetural

Arquitetura do serviço criminal

image

4. Dependências

Table 1. Dependências
Serviço Tipo Descrição

PJe-Legacy

Autenticação e autorização

Depende do PJe para validar se o usuário está autenticado e se possui os papeis necessários para a visualização dos recursos

PJe-Legacy

Permissão negocial

Depende do PJe para validar se um usuário tem permissão para visualizar determinado processo criminal

RabbitMQ

Mensagens

Depende do broker de mensagens para receber atualizações ou notificações de outros serviços

5. Configuração da aplicação

O serviço criminal pode ser configurado de acordo com as seguintes variáveis de ambiente:

Table 2. Variáveis de ambiente
Nome da variável Valor padrão Descrição

CRIMINAL_PORT

8480

Porta do serviço

CRIMINAL_APP_NAME

criminal

Nome do serviço

CRIMINAL_DB_URL

jdbc:postgresql://localhost:5432/criminal?stringtype=unspecified

Url do banco de dados do serviço

CRIMINAL_DB_USER

postgres

Usuário do banco de dados

CRIMINAL_DB_PASSWORD

P123456

Senha de usuário do banco de dados

CRIMINAL_RABBITMQ_HOST

localhost

Host do broker de mensagens

CRIMINAL_RABBIT_USERNAME

criminal

Usuário do broker de mensagens

CRIMINAL_RABBIT_PASSWORD

criminal

Senha de usuário do broker de mensagens

CRIMINAL_RABBIT_VHOST

/

Virtual host do broker de mensagens

CRIMINAL_RABBIT_CONNECTION_TIMEOUT

500

Tempo para timout de tentativa de conexão com o broker de mensagens em milisegundos

EUREKA_SERVER_DEFAULT_ZONE

http://localhost:8761/eureka

Url do service discovery

EUREKA_CLIENT_ENABLED

true

Indicativo de que o serviço deve ou não se registrar no service discovery

CRIMINAL_MANAGEMENT_PORT

8481

Porta de monitoramento do serviço

6. Configuração do armazenamento de dados

Este serviço utiliza banco de dados PostgreSQL versão 9.6 ou superior. A base de dados deve ter encoding UTF-8. Um script de base limpa pode ser encontrado na pasta:

./src/main/resources/db/base/

7. Papeis e/ou recursos

Não contém

8. Interações com o barramento de mensagens

O serviço criminal interage com o barramento de mensagens consumindo mensagens de outros serviços para sincronizar seus dados

8.1. Filas que escuta

O serviço criminal consome mensagens da fila pje.criminal.

São direcionadas para esta fila mensagens que cheguem à exchange pje.exchange com os routing keys *.\*.*.ProcessoParte.\* e *.\*.*.ProcessoEvento.\*

8.2. Mensagens que produz

Este serviço não envia mensagens ao broker de mensagens.

9. Interações com outros serviços

O serviço criminal realiza dois tipos de interações com o serviço pje-legacy.

9.1. Autenticação de usuário

A autenticação para acesso as funcionalidades do serviço é realizada no serviço pje-legacy. Ao acessar um endpoint do serviço criminal é executada uma requisição ao pje-legacy passando o jsessionid do usuário para validação de autenticação do usuário.

9.2. Validação de acesso ao processo criminal

Quando um processo criminal é acessado, o serviço criminal faz consulta ao pje-legacy para saber se o usuário tem acesso àquele processo.

10. Eventos de webhook

N/A

11. Consultas diretas ao serviço

De acordo com a arquitetura construída para o serviço, o serviço pje-legacy consome sua API para fazer alterações e recuperar informações, quando isso acontece o serviço criminal faz uma interação com o serviço pje-legacy para certificar-se de que o usuário possui permissão para executar a operação.

No entanto, muitos tribunais precisam ter acesso direto à API do serviço criminal para gerar relatórios e estatísticas. Para isso, foi criada uma possibilidade de acesso ao serviço sem interação com o serviço do pje-legacy, assim, a ferramenta que fica responsável pela autenticação e autorização do usuário é o serviço de SSO.

11.1. Cadastramento de usuários

Atenção esse cadastramento será feito em nome do próprio tribunal que se responsabilizará pelo sigilo das informações acessadas.

Essa possibilidade de consulta direta ao serviço criminal é restrita aos usuários explicitamente autorizados no serviço de SSO com as roles:

  • ROLE_sistemaProcessual

  • ROLE_visualizaInformacaoCriminal

Para proceder ao cadastramento no serviço SSO para a consulta direta, solicite a autorização no email: cadastrodeusuariospje@cnj.jus.br.

Após esse cadastramento o usuário receberá também as informações de:

  • CLIENT_SECRET - chave do serviço criminal no serviço SSO;

  • USERNAME - nome de usuário para acesso direto ao serviço criminal

  • PASS - senha cadastrada desse usuário

  • URL serviço SSO - para fazer a requisição do token de acesso

  • URL serviço criminal - para fazer a requisição direta ao serviço

11.2. Endpoints disponíveis no serviço criminal

Depois de recebidas as informações de acesso, verifique a API disponível no serviço criminal para acesso:

11.3. Acessando o serviço criminal

Utilize uma aplicação como o postman ou o curl para fazer a requisição, como no exemplo:

11.3.1. Solicitando o token de acesso no SSO

  • Este token de acesso tem a validade padrão de 5 minutos.

curl --location --request POST '<URL Serviço SSO>' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=password' \
    --data-urlencode 'client_id=criminal' \
    --data-urlencode 'client_secret=<CLIENT-SECRET-ENVIADO-PELO-CNJ>' \
    --data-urlencode 'username=<USERNAME-ENVIADO-PELO-CNJ>' \
    --data-urlencode 'password=<PASS-ENVIADO-PELO-CNJ>' \
    --data-urlencode 'scope=openid'

11.3.2. Solicitando informações diretamente no serviço criminal

  • Deve-se agora repassar o token do SSO para acessar o serviço

  • Identifique também qual é o APP_NAME do tribunal que se está buscando informações no serviço criminal, exemplos: pje-tjmg-1g, pje-trf3-2g, pje-tjpb-1g

 curl --request GET '<URL serviço criminal com endpoint de requisicao direta>'
    --header 'X-pje-legacy-app: <APP_NAME>' \
    --header 'Authorization: Bearer <ACCESS-TOKEN-PASSO-ANTERIOR>'