[MySQL] Durante l'inserimento dati nel DB ci sono inserimenti anomali

di il
5 risposte

[MySQL] Durante l'inserimento dati nel DB ci sono inserimenti anomali

Buongiorno programmatori,

Eseguo l'inserimento di un Utente nel DB User di MySql tramite Spring JPA. 

Ho creato un entity User.

L'inserimento avviene nel RestController, metodo Get.

Solamente che inaspettatamente mi ritrovo l'inserimento di un User non voluto.

Mi accorgo di ciò interrogando MySql con la Select.

Forse durante l'installazione di MySql ho reso accesso a malintenzionati?

5 Risposte

  • Re: [MySQL] Durante l'inserimento dati nel DB ci sono inserimenti anomali

    Per accedere al database serve utente e password.

    Prima cosa da fare e' cambiare password con una adeguatamente lunga e complicata.

    Poi devi spiegare che cosa intendi per "user non voluto".

    E' infinitamente piu' probabile (il 99.99999999%) che stai usando male il database.

    Regola generale, che poi va 'raffinata':

    1. apertura connessione
    2. esecuzione statement
    3. se e' una insert, delete, update, eseguire commit o rollback
    4. chiusura connessione

    .

    In generale la chiusura di una connessione senza un commit esplicito equivale ad un rollback. Ma ci sono tutta una serie di configurazioni che devono essete controllate.

    Devi controllare meglio il codice.

    Il "rest controller, metodo get" NON HA NIENTE A CHE FARE CON IL DATABASE, ha a che fare con la connessione HTTP.

    E' come dire che se il motore fa rumore e' colpa della vernice della carrozzeria. Anche no.

  • Re: [MySQL] Durante l'inserimento dati nel DB ci sono inserimenti anomali

    Ciao @migliorabile, grazie per la risposta,

    Mi spiego meglio, quando inserisco un utente tramite il pseudocodice: 

    [repository.save(user);] 

    non lo nomino mai con nome "favicon.ico" che tuttavia me lo ritrovo nella lista utenti della Tabella del DB in questione.

    users — Postimages

    La chiusura della connessione ed il rollback non viene effettuato in automatico?

    Le credenziali le inserisco nel file application.properties di STS.

    So che il RestController non c'entra nulla, tuttavia ho voluto precisare che il valore di test dell'User nel DB lo inserisco tramite questa richiesta GET.

    Per essere più precisi prelevo il nome tramite url: localhost:8080/MrDino

    E salvo il nome nella Tabella.

    Se il nome è passato dall' url ottengo come risultato il salvataggio di "MrDino" e sotto questo nella lista dei nomi compare "favicon.ico" (che non so da dove viene).

    Se invece uso un nome statico, costante, viene ripetuto due volte questo.

    Quindi non solo viene inserito "favicon.ico" senza alcuna richiesta esplicita ma gli input/record sono due.

    E comunque strano che venga inserito un dato non richiesto.

    Questo comunque è il codice nel Controller:

    @RestController

    @RequestMapping("/")

    public class Controller {

    @Autowired

    private UserService userService;

    @GetMapping("/{name}")

        public String getUser(@PathVariable String name) {

    User user = new User(name);

    userService.saveUser(user);

    return "Hello: "+name;

        }

    }

    Questo del servizio richiamato:


    @Service

    public class UserService {

            @Autowired

            private UserRepository userRepository;

            public List<User> getAllUsers() {

                return userRepository.findAll();

            }

            public User saveUser(User utente) {

                return userRepository.save(utente);

            }

        

    }

  • Re: [MySQL] Durante l'inserimento dati nel DB ci sono inserimenti anomali

    Ciao, ho smanettato un po' con il tuo codice :)

    allora il codice presenta 2 problemi:

    1 - stai usando la root principale per salvare un utente

    2 - lo stai facendo con una richiesta GET

    in pratica il tuo browser quando cerca la favicon (il logo dell'app) esegue in automatico il seguente url: 'http://localhost:8080/favicon.ico' che indovina un po' corrisponde alla richiesta che intercetti tu, per questo motivo ti ritrovi un utente favicon.ico nel database

    per risolvere questo problema hai 3 soluzioni:

    1 - se vuoi mantenere la richiesta GET devi intercettare il nome dell'utente tramite querystring (quindi @RequestParam)

    2 - se invece vuoi utilizzare @RequestPart nella root principale devi trasformare la richiesta GET in una richiesta POST

    3 - se invece vuoi mantenere il codice così come l'hai scritto allora devi solo modificare l'url del metodo così: @GetMapping("/aggiungi/{name}")

  • Re: [MySQL] Durante l'inserimento dati nel DB ci sono inserimenti anomali

    Ciao LucaDev, ti ringrazio per l'analisi fatta e la chiarezza. Ho compreso bene la faccenda.  

  • Re: [MySQL] Durante l'inserimento dati nel DB ci sono inserimenti anomali

    Figurati, se hai qualche dubbio chiedi pure

Devi accedere o registrarti per scrivere nel forum
5 risposte