Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Segurança na paginação

Se a gente coloca o @PageableDefault(size = 10) ele vai retornar apenas 10, se na URL não for enviado o parâmetro size. Mas tem como fazer ser 10 registros retornados mesmo sendo enviado o parâmetro com um número maior? Vejo isso como algo para melhorar a segurança.

2 respostas
solução!

Olá Davi!

Entendi sua preocupação com a segurança na paginação. É realmente importante limitar a quantidade de dados retornados para evitar sobrecarga e possíveis ataques.

Para garantir que o número máximo de registros retornados seja sempre 10, mesmo que um valor maior seja enviado na URL, você pode criar uma lógica personalizada no seu controlador. Aqui está um exemplo de como fazer isso:

import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/medicos")
public class MedicoController {

    @GetMapping
    public Page<Medico> listarMedicos(
            @PageableDefault(size = 10) Pageable pageable,
            @RequestParam(required = false) Integer size) {

        // Verifica se o parâmetro size foi enviado e se é maior que 10
        if (size != null && size > 10) {
            pageable = PageRequest.of(pageable.getPageNumber(), 10, pageable.getSort());
        }

        // Aqui você chama o serviço que retorna a página de médicos
        return medicoService.listarMedicos(pageable);
    }
}

Nesse exemplo, mesmo que o parâmetro size seja enviado na URL com um valor maior que 10, o PageRequest.of redefine o tamanho da página para 10.

Espero ter ajudado e bons estudos!

Entendi, muito obrigado!