Newsgroup: it.comp.java
Titolo: Gestione Sicurezza (ACL) nei Servlet Container

Ciao...
sto usando tomcat e un JDBCRealm per definire l'accessibilità di alcuni
Roles (Profili d'utenza) ad alcune risorse (Servlet/JSP). Per
l'autenticazione sto utilizzando il metodo "FORM based Authentication".
Il mio problema è che, quando un utente accede ad una risorsa che gli è
interdetta, viene visualizzata la pagina "Non Autorizzato", e mi aspettavo
invece che il servlet container generasse uno status 403 (SC_FORBIDDEN) o
401 al limite, in modo che poi io posso intercettarlo e gestirmelo. Invece
mi viene eseguito un redirect:
Richiesta:
GET
/sini/jsp/prodotto/controller/inserisciProdotto.jsp?codiceProdotto=xxxx&desc
rizione=xxxxxx&versione=xxxx&codiceOpenPlan=&stato=SVILUPPO&versioneEsercizi
o=&codiceRisorsa=6&x=5&y=12 HTTP/1.1
Accept: application/vnd.ms-excel, application/msword,
application/vnd.ms-powerpoint, image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg, */*
Referer: 
http://localhost:9090/sini/jsp/prodotto/view/inserisciProdotto.jsp
Accept-Language: it
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)
Host: localhost:9090
Connection: Keep-Alive
Cookie: JSESSIONID=qjot8xtqt1
Risposta:
HTTP/1.0 302 Found
Content-Type: text/html
Location: 
http://localhost:9090/sini/jsp/auth/error.jsp
Content-Length: 178
Servlet-Engine: Tomcat Web Server/3.2.3 (JSP 1.1; Servlet 2.2; Java 1.3.1;
Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
Ma questa è solo una parte del problema... nel momento in cui la pagina
error.jsp mi viene visualizzata, viene cancellata l'informazione di
autenticazione, e l'utente è obbligato a ri-loggarsi. E non è assolutamente
quello che io voglio...
Conoscete una soluzione?
Stavo pensando di mettere un link nella pagina d'errore che permettesse di
ri-effettuare il login in modo trasparente, simulando il post delle
informazioni di authenticazione nel form della pagina di login. Ma non mi
sembra una maniera tanto pulita.
Qualcuno sa illuminarmi?
Luigi


Beh, semplicemente, prendi la classe JDBCRealm e estendilo (o crea una nuova
implementazione dell'interfaccia BaseInterceptor) in una tua classe dove decidi tu cosa
fare :-). Il codice e' semplice, non dovresti incontrare alcun problema. (FYI, io me ne
sono scritti un paio :-D)
Ciao,
    Bruno.
---
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
|
| (rimuovere gli spazi dall'indirizzo per rispondere via email)

Scusami dinuovo... ContextInterceptor e RequestInterceptor... un'interceptor
può essere configurato in un modo o nell'altro. Quali differenze ci sono ?
Vengono gestiti diversamente da Tomcat immagino...
Avresti mica qualche esempio da postare?
TNX
Luigi
<bbossola @ 
hotmail.com
 (Bruno Bossola)> ha scritto nel messaggio
news:3d48f601...@news.inet.it...



Io ho preso largo spunto dal codice stesso di tomcat (i sorgenti): ti consiglio lo stesso
approccio. Non ho comuque esempi semplici: gli unici interceptor che ho avuto occasione di
scrivere sono stati quelli per l'autenticazione, tutto il resto mi andava benissimo
com'era.
Magari qualcun altro puo' contribuire?
Ciao,
    Bruno.
P.S.
Hai cannato a quotare :-D


 Hai cannato a quotare :-D
Ops! vero... nella fretta ricado nelle cattive abitudini che ho con Outlook
:-D

Sono ancora titubante sulla soluzione da adottare a questo problema...
Ho postato una richiesta di aiuto su jGuru, se qualcuno sa darmi un
ragguaglio...
Hi
I am using Tomcat 3.2.3 and a JDBCRealm to define the accessibility of some
Roles (User profiles) to specific resources (Servlet and JSP).
For the authentication I am using the FORM based Authentication method.
The problem is: when a user access to a resource (JSP) and is not allowed,
it gets a "Unhautorized" message page, and I was expecting that the servlet
container to generate an HTTP Status code 403 (SC_FORBIDDEN) or at leas 401,
so that, then, I can intercept the code and manage it as I want. This does
not happen: I get a redirect (HTTP 302):
Request:
GET
/sini/jsp/prodotto/controller/inserisciProdotto.jsp?codiceProdotto=xxxx&desc
rizione=xxxxxx&versione=xxxx&codiceOpenPlan=&stato=SVILUPPO&versioneEsercizi
o=&codiceRisorsa=6&x=5&y=12 HTTP/1.1
Accept: application/vnd.ms-excel, application/msword,
application/vnd.ms-powerpoint, image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg, */*
Referer: 
http://localhost:9090/sini/jsp/prodotto/view/inserisciProdotto.jsp
Accept-Language: it
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)
Host: localhost:9090
Connection: Keep-Alive
Cookie: JSESSIONID=qjot8xtqt1
Response:
HTTP/1.0 302 Found
Content-Type: text/html
Location: 
http://localhost:9090/sini/jsp/auth/error.jsp
Content-Length: 178
Servlet-Engine: Tomcat Web Server/3.2.3 (JSP 1.1; Servlet 2.2; Java 1.3.1;
Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
When the user is redirected to this page (error.jsp) he lost authentication
information, and he is forced to re-login. This is my problem: I really
don't want it!
Does anyone knows the solution?
I was thinking to put a link in the error page to allow an "hidden" login,
simulating the post of login details from the login page, but I don't think
it's a clear solution.
I was thinking to substitute the
org.apache.tomcat.request.AccessInterceptor, but again, don't think is a
good solution as all of web application can have unpredicted results and
needs to be deeply tested against this change. Also, it is possible I will
move the application to WebLogic in future, and this solution should be
considered tied to Tomcat?
Thanks to anyone will help :-)
Luigi Viggiano