În cadrul acestei lucrări am urmărit realizarea unei aplicații Web de tip ul unui mini portal cu [623620]

1

INTRODUCERE

În cadrul acestei lucrări am urmărit realizarea unei aplicații Web de tip ul unui mini portal cu
si despre muzica care include la de la magazin on -line pana la blog si porlet accesibil doar pentru
clientii inscrisi pe acest site . Aceasta ap licatie este utila in pri mul rand pasionatilor de muzica,
deoarece acestia pot gasi informatii despre concerte pe fiecare zi/luna, stiri si review -uri, poze,
radio, o pagina cu porteluri, cat si un magazin online toate avand legatura in mod direct cu acest
subiect.
Pentru realizarea acestei aplicații WEB am folosit următoarele :
– Limbaje de programare: Java, Javascript
– Baze de date: MySQL impreuna cu MySQL Workbanch pentru o administrare mult mai
usoara a bazelor de date
– Frameworks: Spring MVC pentru o separare a diferitelor aspecte al e aplicatiei, Hibernate
pentru maparea modelului orientat pe obiecte peste baza de date relationale.
– JSP ( JavaServer Pages ) pentru crearea paginilor dinamice ale aplicatiei , Bootstrap
– Altele: IntelliJIDEA, Apache TomCat 9, Apache Maven

2
Capitolul I – Scurta prezentare a tehnologiilor folosite

I.1 Java

Java este un limbaj de programare foarte important si folosit in intraga lume creat la inceputul anilor
’90 de catre James Gosling, Patrick Naughton, Chris Warth, Ed Frank si Mike
Sheridan de la Sun Microsystems (acum filiala Oracle). A durat aproximativ 18 luni pentru crearea
acestui limbaj, care initial a fost denumit “Oak” , dar a fort redenumit “Java” in 1995. Acest limbaj
a fost creat din nevoia de a se asigura o independenta de plat forma pe care ruleaza cat si
portabilitatea aplicatiilor.
In acest mement Java este mai mult decat un limbaj de programare, este o colectie de tehnologie ce
permite dezvoltarea si rularea de aplicatii sigure, portabile si scalabile. In functie de tipul
de aplicatie pe care dorim sa o dezvoltam, se poate alege una dintre urmatoare platforme:
– Java Platform, Standard Edition ( Java SE ) – iti ofera posibilitatea de a dezvolta aplicatii
desktop ce pot fii rulate cu ajutorul serverelor.
– Java Platform , Enterprise Edition (Java EE) – defineste standardul pentru dezvoltarea
de aplicatii complexe multinivel. Se bazeaza pe J2SE si ofera in plus servicii, unelte si
librarii pentru dezvoltarea de aplicatii multinivel complexe .
– Java Platform , Micro Edition (Java ME) – reprezinta un set de specificatii si tehnologii
ce permite dezvoltarea de aplicatii java pentru dispozitive embaded: telefoane, tablete,
etc.
Printre cele mai importante caracterist ici ale acestui limbaj de programare se regasesc urmatorarele :
– simplitate
– robustețe, elimină sursele frecvente de erori ce apar în programare prin eliminarea
pointerilor, administrarea automată a memoriei și eliminarea fisurilor de memorie printr –
o procedură de colectare a 'gunoiului' care rulează în fundal.
– complet orientat pe obiecte
– securitate , asigura mecanisme stricte de securitate a programelor concretizate prin:
verificarea dinamică a codului pentru detectarea secvențelor periculoase, impunerea unor
reguli stricte pentru rularea programelor lansate pe calculatoare aflate la distanta, etc
– este neutru din punct de vedere arhitectural

3 – portabilitate , cu alte cuvinte Java este un limbaj independent de platforma de lucru,
aceeași aplicație rulând, fără nici o modificare, pe sisteme diferite cum ar fi Windows,
UNIX sau Macinto sh, lucru care aduce economii substanțiale firmelor care dezvoltă
aplicații pentru Internet. Sloganul de bază este: „ Write once, run anywhere ”
– conține o librărie de clase și interfețe pentru domenii specifice cum ar fi programarea
interfețelor utilizator ( JFC, AWT, Swing , JSF, noul Java FX ), programare distribuită etc
– permite programarea cu fire de execuție (multithreaded)
– dinamicitate
– este modelat după C și C++, trecerea de la C / C++ la Java făcându -se foarte ușor.
– face diferența între literele mici și mari (este case sensitive)
– permite dezvoltarea aplicațiilor WEB .
– Java Development Kit (JDK) este disponibil gratis
O alta caracteristica principala a acestui limbaj de program are o reprezinta faptul ca este complet
orientat pe obiecte , iar asta inseamna f aptul ca respecta cele 3 principii ale acestei paradigme de
programare, si anume mostenirea , abstractizare , incapsulare a și polimorfism ul.
– Abstractizarea1 – Este posibilitatea ca un program să ignore unele aspecte ale informației
pe care o manipulează, a dică posibilitatea de a se concentra asupra esențialului. Fiecare
obiect în sistem are rolul unui “actor” abstract, care poate executa acțiuni, își poate
modifica și comunica starea și poate comunica cu alte obiecte din sistem fără a dezvălui
cum au fost i mplementate acele facilitați. Procesele, funcțiile sau metodele pot fi de
asemenea abstracte, și în acest caz sunt necesare o varietate de tehnici pentru a extinde
abstractizarea:
– Încapsularea – numită și ascunderea de informații : Asigură faptul că obiecte le nu pot
schimba starea internă a altor obiecte în mod direct (ci doar prin metode puse la
dispoziție de obiectul respectiv); doar metodele proprii ale obiectului pot accesa starea
acestuia. Fiecare tip de obiect expune o interfață pentru celelalte obiect e care specifică
modul cum acele obiecte pot interacționa cu el.
– Polimorfismul – Este abilitatea de a procesa obiectele în mod diferit, în funcție de tipul
sau de clasa lor. Mai exact, este abilitatea de a redefini metode pentru clasele derivate.
De exempl u pentru o clasă Figura putem defini o metodă arie. Dacă Cerc, Dreptunghi,
etc. ce vor extinde clasa Figura, acestea pot redefini metoda arie.

1 https://ro.wikipedia.org/wiki/Programare_orientat%C4%83_pe_obiecte

4 – Moștenirea – Organizează și facilitează polimorfismul și încapsularea, permițând
definirea și crearea unor clase specializate plecând de la clase (generale) deja definite –
acestea pot împărtăși (și extinde) comportamentul lor, fără a fi nevoie de a -l redefini.
Aceasta se face de obicei prin gruparea obiectelor în clase și prin definirea de clase ca
extinderi ale uno r clase existente. Conceptul de moștenire permite construirea unor clase
noi, care păstrează caracteristicile și comportarea, deci datele și funcțiile membru, de la
una sau mai multe clase definite anterior, numite clase de bază , fiind posibilă redefinirea
sau adăugarea unor date și funcții noi. Se utilizează ideea: ”Anumite obiecte sunt
similare, dar în același timp diferite”. O clasă moștenitoare a uneia sau mai multor clase
de bază se numește clasă derivată . Esența moștenirii constă în posibilitatea refo losirii
lucrurilor care funcționează.

I.2 MySQL

MySQL este un sistem de gestiune a bazelor de date relaționale , lansat in anul 2000
devenind in foarte scurt timp una dintre cele mai utilizate baze de date open source (softw are
cu sursă deschisă – sunt programe dezvoltate de către o comun itate, de către o companie sau de către
o persoană și oferite spre folosire sub o licență liberă, care garantează accesul tuturor utilizatorilor
la codul -sursă ) devenind o componenta cheie a stivei XAMP (Windows , Apache, MySQL, PHP) sau
LAMP (Linux , Apache , MySQL, PHP). A fost produs de catre o companie suedeza MySQL AB
dupa care in anul 2008 a fost cumparat de catre Sun Microsystems , fiind de la studenti pana la cele
mai mari companii precum Facebook sau Twitter.
Acest sistem de gestiune folosete un model relational prin care se reduce redundanta care
reduce spatiul de stocar e a informatiilor si reduce semnificativ timpul de raspuns. Pentru
administrarea acestor baze de date se poate folosi modul linie de comanda, sau, interfete grafice
precum : MySQL Administrator , MySQL Query Browser sau MySQL Workb ench. Un alt
instrument de management al acestor baze de date este aplicația gratuită, scrisă în
PHP, phpMyAdmin .
Conceptele acestei baze de date:
– o baza de date relation ala este formata din tabele, tabele formate din coloane si randuri
– un tabel este de obicei modelat dupa entitati din lumea reala precum client sau produse
– coloana reaprezinta atribute ale unui tabel, precum adresa unui client sau numele acestuia
– randurile contin valorile

5 – majoriatea ta belelor conti n o cheie primara unica –reprezentata printr -o coloana – care
identifica fiecare rand din tabel . Daca sunt mai multe chei primare intr -un tabel acestea
se numesc chei compuse
– de asemenea un tabel poate contine una sau mai multe chei straine care fac legatura cu
alte tabele din aceiasi baza de date
– un tabel poate contine unul sau mai multi indecsi care ajuta la eficientizarea accesului la
datele din baza de date
In bazele de date pot aparea a nomaliile care se produc datorit ă dependen țelor care exist ă
între datele din cadrul rela țiilor bazei de date , astfel se recomanda normalizarea acestora care are ca
scop suprimarea redundan ței logice, evitarea anomaliilor la reactualizare, rezolvarea problemei
reconexiunii. Pentru a obtin e o baza de date normalizata trebuie urmati minim trei din cei cinci pasi
numiti Forma normala 1 pana la forma normala 5.
– FN12 -> FN2 elimină redundanțele datorate dependenței netotale a atributelor care nu
participă la o cheie, față de cheile lui R. Se s uprimă dependențele funcționale care nu
sunt totale.
– FN2 -> FN3 elimină redundanțele datorate dependenței tranzitive. Se suprimă
dependențele funcționale tranzitive.
– FN3 -> BCNF elimină redundanțele datorate dependenței funcționale. Se suprimă
dependențele în care partea stângă nu este o supercheie.
– BCNF -> FN4 elimină redundanțele datorate multidependenței. Se suprimă toate
multidependențele care nu sunt și dependențe funcționale.
– FN4 -> FN5 elimină redundanțele datorate dependentei. ciclice. Se suprimă to ate join –
dependențele care nu sunt implicate de o cheie.
Descompunerea unei relații FN2 în FN3 conservă datele și dependențele, pe când
descompunerea unei relații FN3 în BCNF și, respectiv, a unei relații BCNF în FN4 conservă doar
datele.

2 Curs structuri de date avansate

6 I.3 Spring M VC

Când ne gândim la dezvoltarea unei aplicații web cu ajutorul tehnologiilor Java, unul dintre
primele lucruri pe care le facem este să alegem un framework MVC . In acest moment, unul dintre
cela mai cunoscute si folosite framework -uri dedicate applicatii lor web este Spring MVC .
Spring MVC reprezinta o caracteristica a pachetului Spring Framework care a fost lansata in
data de 1 octombrie 2002 ca o alternativa la modelul Enterprise JavaBeans (EJB) din JEE.
Acest framework ofera un model arhitectural numit Model -View -Controller, iar succesul
acestui model se datorează izolării logicii de business față de considerentele interfeței cu utilizatorul,
rezultând o apl icație unde aspectul vizual și nivelele inferioare ale regulilor de business sunt mai
ușor de modificat, fără a afecta alte nivele.
– Model – Această parte a controlatorului manipulează operațiunile logice și de utilizare de
informație (trimisă dinainte de către rangul său superior) pentru a rez ulta de o formă ușor
de înțeles ( este asemănător unui script obișnuit într -un server, doar că regrupat sub un
model reutilizabil ).
– Viziune (View) – Acestui membru al familiei îi corespunde reprezentarea grafică, sau
mai bine zis, exprimarea ultimei forme a datelor: interfața grafică ce interacționează cu
utilizatorul final. Rolul său este de a evidenția informați a obținută p ână ce ea ajunge la
controlator (fisierele .jsp)
– Controlator (Controller) – Cu acest element putem controla accesul la aplicația noastră.
Pot fi fișiere, scripts sau programe, in general orice tip de informație permisă de interfață.
În acest fe l putem diversifica conținutul nostru de o formă dinamică și statică, în același
timp (acesta trebuie să fie capabil de a manipula rute, fișiere, clase, metode și funcții ).

7 Acest framework este construit in jurul clasei DispatcherServlet care este respon sabil cu gestionarea
fluxului aplicatiei, preia toate cererile HTTP.3

I.3 Hibernate

Hibernate este o biblioteca open -source care simplifica crearea de aplicatii web realizate cu
ajutorul limbajului de programare Java si care interactioneaza cu bazele de date. Acesta biblioteca
oferă o soluție de mapare a unui model orientat pe obiect în bazele de date relationale. Hibernate,
este o implementare a interfeț ei JPA (Java Persistence API) ceea ce inseamna că poate fi folosit pe
orice sistem ce suportă JPA ( de exemplu aplicații Java SE, EE etc).

Hibernate detine un limbaj propriu pentru interogări numit HQL (Hibernate Query
Language), ce permite scrierea de cod SQL utilizând obiectele Java. În plus, biblioteca generează
majoritatea codului SQL în timpul instanțierii obiectului, nu la runtime. De asemenea, Hibernate
foloseste JDBC API ( Java Database Connectivity ) pentru toate comunicatiile cu baza de date.

I.4 JavaServer Pages (JSP)

Jsp este o tehnologie ce rulează pe partea de server și ajută în crearea dinamică de conținut
HTML , avand ca particularitate posibilitatea de a introdu ce cod Java prin diferite metode. Codul
Java poate fi introdus prin inserarea de scriplet -uri prin delimitatorii, prin folosirea de EL
(Expression Language) sau pring folosirea de JSTL (JSP Standart Tag ex pression) .
De obicei, EL si JSTL sunt utilizate impreuna cu JavaBean, aceasta din urma reprezentand o clasa
Java care ideplineste urmatoarele trei conditii:
– Ca o clasa sa poata fi JavaBean trebuie sa aiba un constructor cu zero parametrii
– Trebuie sa aiba a sa numitii setteri si getteri pentru fiecare variabila din acea clasa

3 Sursa slide https://docs.spring.io/spring/docs/current/spring -framework -reference/html/mvc.html

8 – Clasa trebuie sa implementeze una dintre interfetele Serializable sau Externalizable

I.5 Apache Maven

Apache maven reprezinta un instrument folosit de aplicatiile Java pentru automatiz area
build ului, descriind totodata constuctia aplicatiei si introducand automat pachetele necesare pentru
rularea corecta a acesteia. Aplicația este construită in jurul unui fișier numit POM (Project Object
Model) cu extensia XML, ce specifică dependențele către alte module sau componente externe.
Astfel, in momentul buidului toate bibliotecile necesare sunt preluate din cache -ul local , iar în cazul
în care acestea lipsesc, sunt descăcate automat.
Structura proi ectului facut cu ajutorul Maven:

I.6 Apache Tomc at

Apache Tomcat, de altfel cunoscut sub numele de „Tomcat” este un server web open -source,
fiind dezvoltat și menținut de Apach e Software Foundation inca din anul 1999 . Este o implementare
software pentru tehnologiile Java și rulează pe Java Servlets și pagini JavaServer, cunoscute sub
numele de JSP -uri, prezentate pe scurt mai sus.
Tomcat este format din mai multe componente, dar in componenta cea mai importanta este
numita Catalina, a cărui funcționalitate este de a implementa specificațiile servletilor și JSP -utilor

9 (Java Server Pages). Catalina este integrat în orice tip de platformă unde informațiile necesare
autentificării su nt deja create și menținute

Capitolul II – Arhitectura aplicatiei

Aceasta aplicatie foloseste o arhitectura „server -side” continand 3 straturi importante:

– Presentation Layer (Stratul de prezentare )
– Business Layer (Stratu l de business )
– Data Access Laye r (Stratul de acces la baza de date ) – DAO

4
Comunicarea intre straturi se face strict prin Business Layer , iar Presentation Layer nu cominica
direct cu Data Access Layer ci doar prin intermediul lui Business Layer .

Presentation Layer :

4 Diagrama http://terasolunaorg.g ithub.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html

10 Aceast strat de prezentare este organizat de framework -ul Spring MVC (Model -View –
Controller) . Cererea HTTP este preluata de un controller care decide daca este necesara accesarea
unui Business Layer (Stratul de business) sau daca va returna direct in view. Daca este nec esara
accesarea stratului de business, acesta la randul lui va accessa stratul Data Access Layer pentru a
comunica cu baza de date.
Pentru o clasa sa fie considerata un controller de catre Stpring MVC, trebuie sa adnotam clasa cu
adnotia @Controller , si in functie de necesitare putem sa folosim si @RequestMapping(“”).

Business Layer (Stratul de business ):

Acest strat contine functionalitatile de baza ale aplicatie, practic acest strat decide cum sunt
folosite informatiile, precum citire sau scriere din baza de date, primind comenzi de la stratul de
prezentare si apeland la Data Access Layer, daca este cazul . Pentru ca o clasa sa fie recunoscuta ca
facand parte din business layer, aceasta trebuie sa fie adnotata cu adnotatia @Repository. Acest
lucru indi că faptul că o clasă respectă practica DDD (Domain driven design), unde modelul rămâne
încapsulat pe partea de server, fiind reprezentat doar la nivel de servicii și repository -uri (persistentă
a datelor). Aceste servicii respectă principiul singurei respo nsabilități.

Data Access Layer (Stratul de acces la baza de date) :

Data Acces Layer este un strat care ofera accesul la o baza de date. Data access object
realizează managementul conexiunii cu sursa de date pentru a obține și pastra informații. Este
format din 3 componente: interfața DAO (definește operațiile standard ce pot fi realizate pe model),
implementarea interfeței DAO (implementarea interfeței de mai sus), obiectele Model (POJO -uri,
conținând metode set și get). Mapând apelurile aplicației asup ra acestui strat, DAO oferă operații cu
date specifice, însă nu expune informații sensibile despre baza de date.
O clasa sa poate fi considerata o entitate, trebuie adnotata cu adnotatia @Entity unde sunt
mapate tabelele din baza de date prin @Table. O col oană este mapata prin @Column, fiind de fapt
un obiect Java, remarcându -se că numele acesteia nu trebuie să coincidă cu cel al coloanei din tabel.
De asemenea, cheia primara poate fi mapata prin adnotaita @Id, iar daca se doreste
intorducerea autoamata a u nui numar unic trebuie folosita adnotatia @GenerateValue().

Baza de date:

11 Baza de date folosita in pentru dezvoltarea acestei aplicatii este MySQL utilizand interfata
MySQL Workbanch. Mai jos este prezentata diagrama ER pentru magazinul online de instrum ete si
accesorii specifice :

Mai jos este prezentata diagrama aferenta clientilor/administratorilor care perminte
inregistrarea in aplicatie in functie de rolul fiecaruia.

12 Capitolul III – Implementarea aplicatiei

1. pom.xml

Fisieru de tipul XML, numit p om (Project Oriented Mode ) reprezinta fisierul de configuratie al
lui apache Maven. Conține informațiile necesare aplicatiei să construiască un proiect, printre
elemente se numără dependențele proiectului, versiunea proiectului, numele dezvoltatorilor,
descriera, etc.
Fișier trebuie să conțină caracteristici precum groupId (id -ul grupului proiectului, de regulă fiind
unic pe companie), artifactId (id -ul proiectului), version (versiunea proiectului).

13 Dupa cum se observa in imaginea de mai sus, toate depen dentele necesare pentru acest proiect
au fost introduse cu ajutorul acestui fisier, in care sunt specificate bibliotecile impreuna cu versiunile
necesare. Spre exemplu, biblioteca org.hibernate este necesara pentru a putea folosii framework -ul
hibernate, i ar biblioteca fasterxml.jackson.core este folosita pentru a face conversia automata din
obiecte Java in Json . Daca in momentul in care se face buidl -ul, aceste biblioteci nu exista, maven le
va descarca automat.

2. web.xml

Practic, acest fisier reprezinta u n fisiet de configurare a aplicatiei WEB , care specificate
serverului tot ce trebuie sa stie pentru a rula aplicatia, printre care si unde sunt plasate resursele
aplicației, putand fi accesate doar din această locație.

14 3. applicationContext.xml

Reprezin tă interfața centrală dintr -o aplicație Spring, ce conține informații de configurare a
acesteia. La run -time este read -only, dar poate fi reîncărcat dacă este necesar. ApplicationContext
poate încărca java beans, la cerere le poate distribui, și le poate l ega împreună. Prezintă interes
deoarece adaugă funcționalități specifice aplicațiilor enterprise.

– aici sunt definite informatiile necesare pentru ca aplicatia sa se poate conecta la baza de
date MySQL. B eanul sessionFactory , este cel care se ocupă de pr oprietățile JPA (Java
Persistence API), făcând referire la proprietatea 'dataSource'. Aceasta conține informații
ce ajută la stabilirea conexiunii cu baza de date.

15 – Beanul transactionManager este folosit pentru adnotatia @Transactional si pentru a nu fi
nevoit de a deschite o tranzactie dupa care, obligatoriu a se inchite, aceste lucruri se fac
automat cu ajutorul acestiu bean.

– de asemenea, i n acest fisier sunt specificate configuratiile pentru upload -ul imaginii, si
anume dimensiunea maxima a unei imagini , cat si configuratiile pentru securitate si
pentru spring flow folosita la trimiterea comenzii de catre un client inregistrat pe site.

4. Dispatcher -servler.xml

Acest fisier fisier defineste locul unde se găsesc toate clasesle ce conțin adnotările @Contro ller,
@Repository, @Entity , etc (base -package=" com.fmi.portal "). În cazul în care aceste clase sunt

16 găsite, Spring le va înregistra în „bean -factory” . Tot in acest fisier este configurat faptul ca aceasta
aplicatie foloseste adnotatii si defineste locati a resurselor folosite de catre aplicatie.

5. Prezentarea unui @ Controller

Ca o clasa sa fie considerata controller, aceastra trebuie adnotata cu @Controller. Mai jos estre
prezentat un controller numit ProductCtrl .
In primul rand se observa ca aceasta c lasa este adnotata @Controller, de asemenea, mai are si
adnotatia @RequestMapping(„/shop”) care mapeaza un url. De exemplu, getProduct() mapeaza
adresa de genul http://localhost:8080/shop/productList . In cazul in care spring gasete un view cu
denumirea de „productList.jsp” acesta metoda va redirectiona catre acea pagina. In caz contrar, in
utilizatorul va fi redirectionat catre o pagina 404 , specificand ca pagina nu exista.

17 In web.xml se poate p rinde rea acest tip de eroare HTTP 404, iar utilizatorul sa fie redirectionat
catre o pagina proprie.
<error-page>
<error-code>404</error -code>
<location>/WEB -INF/views/error/404.jsp</location>
</error -page>

18 6. Prezentarea unei clase @Repository

Mai jos es tre prezentat a clasa ProductDAOImpl care implementeaza interfata ProductDAO,
avand adnotatia @Repository. Aceste clase, care au aceasta adnotatie, sunt clasele care pot accesa
bazele de date. De asemenea, @Transactional este utila deoarece va deschide si i nchide automat o
tranzactie fara sa mai fie nevoie sa o facem prin scriere de cod.

Dupa cum se vede, pentru a extrage toate produsele din baza de date se foloseste interfata
SessionFactory (este injectat prin adnotarea @Autowired, p ractic, în acest fel, rolul instantierii
clasei este preluat de Spring și nu de dezvoltator. ) care are metode pentru interactionarea cu

19 contextul de persistență. Functia createQuery primește ca parametru un String în formal HQL
(Hibernate Query Language). Diferența dintre SQL și HQL este ca ultimul menționat face referire la
obiecte Java și nu la elemente specifice bazei de date.

7. Prezentarea unei clase @Repository

Acest lucru se realizeaza cu aju torul bibliotecii de persistenta Hibernate. O clasa numita si
entitate va coresp unde unui tabel din baza de date. Prin adnotarea @Entity marcăm clasa Product ca
fiind un bean, fiind mapata de tabelul „product” . O regulă a Hibernate -ului este ca orice entitate să
aibă o cheie primară, specificată prin @Id.

@GeneratedValue se folos este cand dorim ca valoarea variabilei respective sa fie create automat,
fara sa fie nevoie sa -i dam noi o valoare.

20

@Min(value = 0, message = „Valoarea produsului nu trebuie sa fie mai mica de 0 ”) – aceasta
adnotatie nu da voie a se introduce o valoare s ub valoarea mentionata, in acest caz 0, iar daca se
incearca intorducerea unui numar mai mic se va afisa mesajul „Valoarea produsului nu trebuie sa
fie mai mica de 0”.
@NotEmpty(message = „Numele produsului”) – aceasta variabila trebuie sa aiba o valoarea inainte
de fi introdusa in baza de date, altfel se va afisa mesajul „Numele produsului”
@Transient – este folosit cand se doreste ca un anumit camp sa nu fie introdus in baza de date

21 @OneToMany – este in functie de diagrama ER, de asemenea, exista adnotat i precum @OneToOne
cat si @ManyToMany .

8. Prezentarea unui Jsp

Mai jos este prezentata pagina care este afisata unui client cand doreste sa vada produsele din
magazinul portalului. La inceputul fisierului sunt trei directive prin care este intordus un heade r si
inca doua prin care se specifica faptul ca se vor folosi anumite librarii si unde se gasesc acestea.

Produsele prezentate pe aceasta pagina sunt aduse din baza de date dinamic. De exemplu, „product”
din expresia ${product.productManufacturer} este u n atribut trimis prin controller odata cu
redirectionarea catre aceasta pagina prin metoda getProductDetailed ().

22

9. Autentificarea

Utlizatorul are posibilitatea să se inregistreze pe site completand un formular, iar apoi se poate
autentifica prin indroduc erea credentialelor de autentificare unice . De asemenea, in functie de
coloana „authority” din tabelul „ authorities ” in momentul in care un utilizator introduce
credentialele acesta va fi redirectionat catre o anumita pagina, iar daca authority este de
ROL E_USER, acesta are acces doar o parte din aceasta aplicatie comparativ cu un ROLE_ADMIN
care are acces la intreaga aplicatie inclusiv la pagina de admin.
Tabelul „users” din baza de date:

Tabelul „authority” din baza de date :

Pentru a verifica identita tea utilizatorilor a fost folosit Spring Security , acesta fiind un framework
concentrat pe furnizarea de autentificare, autorizare si alte caracteristici de securitate pentru
aplicat iile Java. In diagrama de mai jos sunt prezentati pasii facuti de utiliza tor si pasii facut de acest
framework . 5

5 Diagrama si mai multe informatii – http://www.studytrails.com/frameworks/spring/spring -security -using -db/

23

Pentru a folosi Spring Security framework in pr imul rand au fost introduse toat e dependentele in
fisierul pom.xml.

Urmatorul pas a fost introducerea unui filtru in fisierul web.xml, practic oricare url care vine dupa
„/” (root) va fi interceptat de spring security.

24

Apoi a fost introdusa configuratia pentru securitatea HTTP in fisierul applicationContext.xml.

In prima parte a codului prezentat, sunt configurate paginile la care sunt redirectionati utilizatorii in
functie de rolul fiecaruia. C e se intampla in cazul in care un utilizator are rolul de admin istrator si ce
se intampla daca are rolul de client, de asemenea, este configurat si url -ul la care este redirectionat
un utilizator in cazul in care informati ile introduse nu sunt corecte, si anume acesta este trimis la
pagina „/login?error”. In partea a doua a codului, este configurata locatia de unde spring security
gaseste informatii despre parola si numele utilizatorului .

25 Daca utilizatorul a introdus info rmatii gresite sau a iesit din cont, cu ajutorul controller -ului reusim
sa-i transmitem informatia corecta.
In fine, ultimul pas a fost crearea pagini login.jsp, in care se observa faptul ca la atributul
action al formularului este trecut „/login” acesta f acand parte din Spring Security 4x si este
inlocuitorul valorii „/j_spring_value_check” din varianta de Spring Security 3 x.

Ultimul input cu numele „ _csrf.parameterName ” si cu valoarea „ _csrf.token ” este introdus pentru
atacurile de tipul Cross Site Requ est Forgery (CSRF)6.

6 Detalii despre CSRF – https://docs.spring.io/spring -security/site/docs/current /reference/html/csrf.html

Similar Posts