You are on page 1of 35

Razvoj Web aplikacija

2. dio

Marko Čupić
Lipanj, 2007.
Web formulari
• servleti i JSP-ovi s korisnikom
komuniciraju kroz parametre
– prijenos preko GET Æ parametri kroz URL
– prijenos preko POST Æ parametri putuju
kao tijelo zahtjeva (korisnik ih ne vidi)
• Važan link: Servlet specification v2.4

http://jcp.org/aboutJava/communityproc
ess/final/jsr154/index.html
Web formulari
• definirano od strane W3C:

http://www.w3.org/TR/html4/interact/fo
rms.html
Web formulari
• Kako bi se omogućilo da korisnik unosi
željene parametre Î Web formulari
• U HTML dokumentu to je tag <FORM>
• Osnovna struktura:

<form action=”” method=”” enctype=””>


...
</form>
Web formulari
• <form action=”” method=”” enctype=””>
...
</form>
• action:
– Na koji URL treba poslati sadržaj koji
predstavlja popunjeni formular
• method:
– Na koji način treba zapakirati sadržaj
formulara; najčešće GET ili POST
Web formulari
• <form action=”” method=”” enctype=””>
...
</form>
• enctype:
– Kako treba sastaviti “tekst” koji predstavlja
sadržaj formulara
– Danas se koriste:
• application/x-www-form-urlencoded
(ovo je pretpostavljeni način)
• multipart/form-data
Web formulari
• application/x-www-form-urlencoded
– Pretpostavimo da formular sadrži dva polja
za unos teksta: JMBAG i Smjer
– Ako korisnik u formular upiše 0012345678 i
FER1, sadržaj formulara prema ovom
kodiranju prevest će se u:

JMBAG=0012345678&Smjer=FER1

i poslati poslužitelju
Web formulari
• application/x-www-form-urlencoded
– Ovaj način kodiranja formular pretvara u
niz parova ime=vrijednost, pri čemu su
pojedini parovi razdvojeni znakom &
– Ako ime ili vrijednost sadrži takav znak (ili
neki drugi koji se posebno tretira), te
znakove treba zamijeniti odgovarajućom
escape sekvencom kako ne bi došlo do
zabune kod ponovne rekonstrukcije
sadržaja formulara na poslužitelju
Web formulari
• multipart/form-data
– Složeniji način
– Tipično se koristi zajedno s POST načinom
slanja kada se u sklopu formulara šalju
datoteke
Web formulari
• Tijelo formulara
– kontrole za unos različitih vrsta
– podataka
• linija teksta / šifre
• višelinijski unos
• isključive opcije
• višestruki izbor
• jednostavni izbornik
• skriveni parametri
• gumbi
Web formulari
• Primjer
Web formulari
• linija teksta / šifre

<input
type=”text”
name=”prezime”
value=”Peric”
size=”30”>
Web formulari
• linija teksta / šifre

<input
type=”password”
name=”zaporka”
value=”tajna”
size=”30”>
Web formulari
• Višelinijski unos
<textarea
name=”adresa”
rows=”5”
cols=”30”>
Nepoznato
</textarea>
Web formulari
• isključive opcije
<input
type=”radio”
name=”spol”
value=”M”
checked>Muško
• Više kontrola s istim imenom čini
međusobno isključivu grupu!
Web formulari
• višestruki izbor
<input
type=”checkbox”
name=”drustvo”
value=”ieee”
checked>IEEE
• Podržano više kontrola s istim
imenom!
Web formulari
• jednostavni izbornik / lista
<select name="posao" size="1">
<option value="nista" selected>Ništa od navedenog
<optgroup label="Edukacija">
<option value="edu1">Asistent
<option value="edu2">Nastavnik
</optgroup>
<optgroup label="Politika">
<option value="pol1">Političar
<option value="pol2">Glasnogovornik
</optgroup>
</select>
Web formulari
• skriveni parametri
<input
type=”hidden”
name=”rubrika”
value=”r18”>
• nema vizualne reprezentacije
Web formulari
• Gumbi

<input
type=”button”
value=”provjeri”

onClick=”neki_javascript_kod”
>

• za poziv javascript-a u klijentu korisnika


• umjesto INPUT postoji i BUTTON tag
Web formulari
• U trenutku pritiska gumba submit
– preglednik provjerava sve kontrole forme
– prikuplja sve vrijednosti
– slaže zahtjev koji će biti poslan (GET ili
POST)
– šalje zahtjev za stranicom iz action
atributa (dodaje parametre za GET)
Zaštita stranica
• Pojam “korisnika” važan je pri izradi
Web aplikacija
• Model koji se koristi kod servleta i
JSPova sadrži dva koncepta:
– korisnik
– uloga
Zaštita stranica
• Servlet / JSP u svakom trenutku može
doznati u ime koga se izvršava pozivom:

String
request.getRemoteUser();

• Servlet / JSP u svakom trenutku može


doznati je li aktivni korisnik u nekoj
ulozi:

boolean
request.isUserInRole();
Zaštita stranica
• Pojedini dijelovi Web aplikacije mogu se
zaštititi:

– programski
(“hardkodirati” provjere)

– deklarativno
(u web.xml datoteci)
Zaštita stranica
• Deklarativna zaštita:
u web.xml tag security-constraint
<security-constraint>
<display-name>Security Constraint for rokovi</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/zasticeno/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<!-- Anyone with one of the listed roles may access this area -->
<role-name>manager</role-name>
<role-name>rokoviAdmin</role-name>
</auth-constraint>
</security-constraint>
Zaštita stranica
• U trenutku kada se zahtjeva
deklarativno zaštićena stranica:
– provjerava se je li korisnik već logiran
– ako je, provjerava se ima li potrebnu ulogu
– ako nije, prelazi se na fazu autentifikacije
– po uspješnoj autentifikaciji provjerava se
ima li korisnik potrebnu ulogu
Zaštita stranica
• Tomcat podržava nekoliko metoda
autentifikacije
• Dvije najčešće korištene:
– BASIC – sam klijent (Web preglednik) kroz
dijalog pita korisnika za username &
password
– FORM – Web aplikacija ima stranicu s
formularom za autentifikaciju
Zaštita stranica
• Metoda autentifikacije konfigurira se
tagom <login-config>:

<login-config>
<auth-method>FORM</auth-method>
<realm-name>
Example Form-Based Authentication Area
</realm-name>
<form-login-config>
<form-login-page>/jsp/secure/login.jsp</form-login-page>
<form-error-page>/jsp/secure/error.jsp</form-error-page>
</form-login-config>
</login-config>
Zaštita stranica
• Ako se koristi metoda BASIC
– <form-login-config> dio se izostavlja
Zaštita stranica
• Primjer formulara: login.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head><title>Login Page</title></head>
<body bgcolor="white“
onLoad="document.forms[0].j_username.focus();">
<form method="POST“
action='<%= response.encodeURL("j_security_check") %>'>
Username: <input type="text" name="j_username"><br>
Password: <input type="password" name="j_password"><br>
<input type="submit" value="Log In"> <input type="reset"><br>
</form>
</body>
</html>
Zaštita stranica
• Primjer formulara: error.jsp

<%@ page contentType="text/html; charset=utf-8" %>


<html>
<head>
<title>Error Page For Examples</title>
</head>
<body bgcolor="white">
Invalid username and/or password, please try
<a href='<%= response.encodeURL("login.jsp") %>'>
again </a>.
</body>
</html>
Zaštita stranica
• Od kuda se “vade” podaci o korisnicima?
• Tomcat izvore tih podataka zove
“Autentification Realms”
• Tomcat dolazi s nekoliko implementacija
Zaštita stranica
• Podaci iz lokalne datoteke:
($CATALINA_HOME/conf/tomcat-users.xml)

<Realm
className="org.apache.catalina.realm.UserDatabaseRealm“
debug="0“
resourceName="UserDatabase"/>
Zaštita stranica
• Primjer datoteke
($CATALINA_HOME/conf/tomcat-users.xml)

<?xml version='1.0' encoding='utf-8'?>


<tomcat-users>
<role rolename="korisnik"/>
<role rolename="administrator"/>
<user username=“perica" password="tajna“
roles="korisnik,administrator"/>
<user username="pero" password="tajna2"
roles="korisnik"/>
</tomcat-users>
Zaštita stranica
• U web.xml korištene uloge treba
deklarirati!

<security-role>
<description>
Obican korisnik
</description>
<role-name>korisnik</role-name>
</security-role>
<security-role>
<description>
Administrator sustava
</description>
<role-name>administrator</role-name>
</security-role>
Zaštita stranica
• Osim ovoga, podaci se mogu dohvaćati
iz raznih baza (JDBCRealm), ...

You might also like