2010-05-11 23 views
10

Ho utilizzato GWT 2.0 da alcuni giorni. Quindi, provo a codificare un'applicazione di base con un modulo di accesso e una pagina accessibile solo se sono registrato.Integrazione GWT 2.0 con Spring Security 3.0

Di solito nella mia applicazione Web con jsf, ad esempio, utilizzo Spring Security 3.0 per configurare e proteggere questo tipo di applicazione. Così, ho deciso di provare a fare la stessa cosa con la mia applicazione GWT 2.0.

Ho configurato bene la parte server di Spring Security. Quindi, dalla mia pagina di login GWT, posso inserire il mio login/password e l'autenticazione tramite Spring Security viene eseguita. Il reindirizzamento alla pagina protetta viene eseguito e posso ottenere l'utente connesso tramite una chiamata rpc al servizio di sicurezza che utilizza SecurityContext di Spring Security. Quindi, penso che quella parte sia ok.

Ma, ho un grosso problema per proteggere gli URL. In effetti, mi piacerebbe proteggere la pagina per limitare l'accesso a ruoli specifici come faccio solitamente con Spring Security.

Nella mia applicazione GWT, utilizzo il pattern MVP con controller centrale dell'applicazione. Quindi, ho solo una pagina e per quella pagina ho delle viste diverse quando aggiungo #name_of_view alla fine dell'URL. Ad esempio, per accedere alla mia pagina di accesso in modalità di sviluppo, utilizzo il seguente URL sul mio browser:

http: // 127.0.0.1:8888/fr.myapp.Application/Application.html?gwt.codesvr= 127.0.0.1:9997#login

una volta che sono correttamente collegato, io vado alla seguente vista:

http: // 127.0.0.1:8888/fr.myapp.Application/Application.html? gwt.codesvr = 127.0.0.1: 9997 # pagesecured

Per questo motivo, non so come configurare il tag http in Spring Security e come definire l'URL da intercettare per influire su ruoli specifici da limitare accesso. Inoltre, penso che ci sarà un problema nell'usare questi URL tra la modalità di sviluppo e una modalità di produzione classica. No ?

Così, qualcuno avrebbe alcuna idea di aiutarmi a configurare e fissare la mia applicazione utilizza questi URL? o utilizzando un'altra tecnica per proteggere l'applicazione con l'accesso al modulo?

Grazie per l'aiuto.

Sylvain.

risposta

8

Non è possibile utilizzare la protezione a livello di pagina in questo scenario, perché le vostre opinioni vengono modificate al lato client.

L'unico modo per implementare una protezione basata sui ruoli in un'applicazione di questo tipo è utilizzare un codice method-level security nel codice lato server. È anche possibile limitare l'accesso al proprio Application.html per utenti non autenticati creando una pagina di accesso non-GWT spearata (ad esempio, Login.html).

5

D'accordo con @axtavt - In generale, non è possibile utilizzare la sicurezza a livello di pagina con GWT, perché è solo una pagina per quanto riguarda la sicurezza di primavera.

si dovrebbe fare le seguenti -

  1. garantire la sua URL RPC. Se necessario, è possibile utilizzare la sicurezza a livello di metodo come evidenziato da axtavt. Per collegare RPC con Spring Security, eseguire l'override del metodo onAfterRequestDeserialized(RPCRequest) nel servlet RPC.Il metodo RPCRequest contiene dettagli sul metodo da richiamare e i parametri effettivi che vengono passati a quel metodo. Questa informazione è sufficiente per impedire a un utente di aggiornare i record di un altro utente.

  2. In caso di errore di autenticazione o di autorizzazione nel servizio RPC, inviare gli errori appropriati e inviarli al client. Nel tuo client, crea un centralized error handler e mostra il messaggio appropriato all'utente.

  3. Infine, oltre alla sicurezza di primavera, è possibile proteggersi contro XSS e CSRF. Fare riferimento a Security for GWT Applications per ulteriori informazioni.

1

È possibile utilizzare la sicurezza a livello di pagina, poiché il modulo GWT può essere condiviso da due pagine utilizzando il metodo descritto da rustyshelf qui: Problem with multiple entry Points in the same module.

In sintesi:

  1. Creare una pagina, ad esempio, Login.html, che utilizzerà solo l'accesso del token, consente a chiunque di accedervi e, ad esempio, dovrebbe contenere un tag div con il login dell'ID.
  2. Utilizzare Application.html, con un tag div con l'applicazione ID, che sarà per tutto il resto e assicurarsi che non consenta l'uso del token di accesso e negare l'accesso a tutti gli utenti non autenticati.
  3. Il modulo GWT deve caricare la vista appropriata in base al tag div presente nella pagina.

div in ciascuno dei file HTML devono essere utilizzati solo per capire quale pagina HTML sta per essere visualizzato (in onModuleLoad), ma il div dovrebbero quindi essere rimosso, come il resto della domanda non dovrebbe fare affidamento sulla presenza del div.

Si consiglia inoltre di utilizzare method security per proteggere i propri RPC, poiché quanto sopra consentirà semplicemente di proteggere l'URL dal quale funzionerà la maggior parte delle applicazioni.