Dezvoltarea aplicatiilor Java ee web

Dezvoltarea aplicatiilor Java ee web
JAVA EE: Dezvoltarea aplicațiilor web. JAAS. Sesiunea.

Configurarea unui sistem de securitate la nivel de web este redusă la două sarcini:

  1. Preveniți accesul neautorizat la conținut protejat.
  2. Prevenirea furtului (citirea) conținutului protejat în timpul transmisiei.

A doua sarcină este rezolvată utilizând Transport Layer Security (TLS) sau predecesorul Secure Socket Layers (SSL). Soluția celei de-a doua probleme va fi descrisă în următorul articol.

La implementarea mecanismului de protecție a informațiilor împotriva accesului neautorizat, două tipuri de scheme sunt împărțite:

Atunci când un utilizator vizitează site-ul, el poate fi numit "roluri" care acordă sau refuză accesul la anumite funcții ale sistemului (acces la anumite conținuturi sau funcții).

Securitatea declarativă va fi utilizată în articol.

1 Este posibil să aveți nevoie de un instantaneu din ultima lecție pentru a lucra. Poți so luați aici.

Crearea de conținut securizat

Pentru a delimita accesul la conținutul site-ului, creați o secțiune care va fi disponibilă numai pentru utilizatorii înregistrați.

Mecanism de verificare a autenticității

Mecanismul de autentificare este folosit pentru a determina modul în care utilizatorul accesează conținut privat. Platforma Java EE suportă diferite mecanisme de autentificare, însă în industria web cea mai populară este cererea utilizatorului de autentificare și parolă. Pentru a implementa acest mecanism, se folosește "Autentificarea bazată pe formulare".

Autentificarea bazată pe formulare are principalul avantaj prin faptul că permite dezvoltatorilor să proiecteze aspectul formularului de intrare astfel încât să se potrivească mai bine sub interfața comună a sistemului.

Să luăm în considerare algoritmul acțiunilor la trecerea controalelor pe formulare:

Dezvoltarea aplicatiilor Java ee web

Pentru ca mecanismul să funcționeze corect, este necesar ca câmpul de acțiune pentru forma să aibă întotdeauna valoarea j_security_check. Acest lucru este necesar pentru o portabilitate ușoară a aplicațiilor.

De asemenea, este necesar să utilizați următoarele nume pentru câmpurile de introducere pe formular:

Faceți următoarele:

JAAS. Configurați politica de securitate în descriptorul de implementare

Dezvoltarea aplicatiilor Java ee web

Dezvoltarea aplicatiilor Java ee web

Utilizatori, grupuri, roluri

Pentru cei care au lucrat deja cu sistemul de acces distribuit, este destul de ușor de înțeles schema divizării utilizatorilor în grupuri, iar grupul (sau utilizatorii) prin roluri. Pe scurt, voi explica celor care nu au fost inițiați.

În documentația oficială din oracol există o ilustrare bună care ilustrează descrierea de mai sus:

Creați utilizatori și grupuri pe server

După descărcarea consolei, treceți prin arborele Configurație-> server-config-> Security-> Realms. Acolo veți lua 3 variante Realm predefinite, dar avem nevoie de fișier. selectați-l.

Dezvoltarea aplicatiilor Java ee web

Rămâne să adăugăm logică servletului, care prelucrează cererile la conținut privat și umple semnificația cu conținutul închis însuși (index.jsp).

  1. Deschideți fișierul privat_cotroller.java și înlocuiți dispozitivul de tratare a interogărilor cu următoarele:
    În atributul name, transmitem numele apelantului apelând funcția getUserPrincipal () GetNaime () a instanței HttpServletRequest. Dacă doriți să comparați rolul utilizatorului și cel de care aveți nevoie, atunci aceasta face ca metoda:
    Prin metoda
    primim o sesiune de utilizator. Valoarea false indică faptul că, dacă nu există nicio sesiune, nu trebuie să fie creată, altfel servletul va crea automat o nouă sesiune pentru client și îl va returna.

Rămâne să adăugați următorul cod în fișierul private_article.jsp:

Dezvoltarea aplicatiilor Java ee web

JDBCRealm. Utilizarea unei baze de date pentru stocarea datelor utilizatorului

Serverul Glassfish oferă posibilitatea de a utiliza JDBCRealm și care utilizează baza de date pentru a obține o autentificare, o parolă și un grup de utilizatori.

Pentru a reconstrui aplicația noastră web, este nevoie de mult mai puțin mișcare decât pare de la început. Toți trebuie doar să creăm un nou domeniu și să îl declarăm în fișierul web.xml. hai să o facem.

  1. Reveniți la consola de administrare a serverului, în fila Realms.
  2. Faceți clic pe butonul nou pentru a crea un nou domeniu.
  3. Pentru nume, scrie JDBCRealmMyblog și selectați clasa:
    com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm
  4. Apoi, veți urma descrierea câmpurilor și valorile care le vor fi completate:
    • Contextul JAAS. jdbcRealm este identificatorul modulului de conectare.
    • JNDI. jdbc / myblog - JNDI este numele resursei JDBC prin care va avea loc conexiunea la baza de date.
    • Tabelul utilizatorilor. utilizatori - Tabel cu utilizatori
    • Numele coloanei. login - câmpul în care numele de utilizator este stocat.
    • Coloană Coloană. pass - Câmpul pentru parola utilizatorului.
    • Tabelul grupurilor. groupuser - Un tabel în care sunt stocate legăturile utilizatorilor către grupuri.
    • Coloana Nume utilizator de tabelă de grup. users_login - Un câmp din tabela de grup care stochează numele de utilizator.
    • Numele grupului Coloană. nume - un câmp din tabela de grup care stochează numele grupului.
    • Digest Algorithm. none - Cel mai adesea, parolele nu sunt stocate în baza de date, dar sunt criptate cu algoritmi hash diferiți sau chiar criptare în flux. Acest câmp indică numele algoritmilor de criptare. În cazul nostru, parolele sunt stocate în mod deschis și, prin urmare, nu sunt stabilite.
    • Dezvoltarea aplicatiilor Java ee web
  5. Faceți clic pe "OK" pentru a crea un nou domeniu.

Rămâne doar să schimbăm eticheta definiției domeniului în fișierul web.xml înlocuind fișierul cu cel creat de noi:

Creați un grup privat în baza de date și legați-l cu unul dintre utilizatorii pe care l-am înregistrat în ultima lecție.

Cu această adnotare, am anunțat un grup de utilizatori cu care operează servletul. Acum puteți elimina codul din web.xml:

Puțin despre parametrii:

@ServletSecurity - oferă o metodă alternativă descriptorului de implementare, controlul accesului la aplicațiile WEB. Saci au nevoie de servlet trebuie să prelucreze și să interpreteze @ServletSecurity adnotare din toate clasele și subclasele să pună în aplicare interfață javax.servlet.Servlet. Adnotarea poate avea doi parametri:

  • valoarea este de tipul HttpConstraint și descrie restricțiile aplicate tuturor metodelor HTTP care nu sunt menționate în httpMethodConstraints;
  • httpMethodConstraints este o matrice de elemente HttpMethodConstraint. Restricții speciale pentru metodele HTTP, cum ar fi GET, POST și altele.

@HttpConstraint este primul parametru al @ServletSecurity. descrie regulile de accesare a servletului și are următorii parametri:

  • valoarea este acțiunea prestabilită dacă matricea rolăAllowed este goală;

rânduri de arrayAllowed - numele rolurilor cărora li se permite accesul;

  • transportGuarantee - cerințe pentru stratul de transport al conexiunii actuale, vom vorbi mai multe despre el în următorul articol.

Puteți diferenția și rolurile de acces în componentele EJB, folosind:

@DeclareRoles - definește rolurile de securitate într-o aplicație sau clasă în desfășurare.

@RolesAllowed - definește lista de roluri la care se face accesul la această sau la metoda respectivă.

Vedem rezultatele articolului. Ne-am familiarizat cu tehnologia JAAS, am studiat compoziția sa teoretică și am implementat un exemplu practic de autentificare a formularului folosind fișierul Realm și JDBC Realm. Am învățat cum să creați setări de securitate pentru firewall pentru utilizatori, să diferențiați aceste setări prin metode (POST, GET.) Și să le legați grupurile de utilizatori. Utilizând consola de administrare, am creat JDBC Realm care utilizează baza de date pentru a obține informațiile necesare despre utilizator. Am folosit două metode de configurare a configurației: formatul xml în descriptorul de implementare și adnotarea @. În plus, am învățat cum să folosim principalele caracteristici ale sesiunilor web (obținerea, dezactivarea, adăugarea și eliminarea atributelor).

În următorul articol, vom examina în detaliu posibilitățile de utilizare a protocolului de transfer de date criptat (https).

1 O fotografie gata de lecție poate fi dusă la GitHub.