Applicazione Web Struts: convalida riutilizzabile lato client e lato server

La nostra applicazione Struts duplica molti controlli di convalida per i moduli: (1) lato client in jQuery / JS e (2) separatamente, lato server in Java.

Ho chiesto il motivo perché, e ha detto “non puoi mai fidarti del lato cliente”. Ma d’altra parte, per comodità, vuole fornire anche la convalida JS / jQuery nel browser.

C’è un sacco di codice ridondante. Qual è la strategia giusta per avere convalida riutilizzabile da entrambe le parti? Al giorno d’oggi le persone duplicano manualmente la convalida lato client / lato server?

  • La convalida lato server è obbligatoria : la richiesta può provenire da una pagina Web modificata, ad esempio con regole modificate con FireBug o qualsiasi tipo di DevTools. O ancora più semplice, la richiesta può essere creata da un utente malintenzionato, proveniente da una pagina (o un blocco javascript, o altro) creato ad hoc , ignorando completamente la tua pagina.

Pensala come la porta di casa tua: con essa, nessuno può entrare senza la chiave giusta. Senza di esso, chiunque può entrare.

  • La convalida lato client è user-friendly e performance friendly : impedisce all’utente di attendere la risposta negativa del server, impedisce alla rete di essere inondata da richieste errate che potrebbero essere state interrotte (dato il numero di utenti e la possibilità di caricare i file insieme ai dati del modulo, questo potrebbe raggiungere una massa critica molto presto).

Pensala come la porta con l’ interfono all’esterno dell’edificio. Con esso, se non rispondi all’intercom, la gente se ne va immediatamente. Senza di esso, le persone devono entrare nell’edificio, salire le scale, bussare alla tua porta … solo per scoprire che non sei a casa.

È NECESSARIO applicare una convalida sul lato server, che nel caso di Struts2 sia con il metodo validate() o validateXXX() , o con la XML Validation , o usando le annotazioni (con l’azione interna Annotazioni Struts2 o con jsr303 -validator-plugin di @UmeshAwasthi per entity framework).

Se si desidera riutilizzare la convalida lato server come convalida lato client, è ansible utilizzare il plug-in Struts2-jQuery come descritto in questa risposta .

BTW, HTML5 (con fallback) e una validazione jQuery di base sul lato client dovrebbero essere sufficienti.

Metti il ​​vero sforzo sul lato server, poi se hai ancora tempo e budget, migliora il lato client.