2015-05-18 17 views
7

Sono coinvolto in un progetto utilizzando Spring Security 4.xe JSF 2.2 con Facelets. Ho appena notato che la sicurezza di primavera in questa versione ha abilitato di default la protezione contro la falsificazione di richieste cross-site usando i token di richiesta, il caso è che devi mettere il tag <sec:csrfMetaTags> in molte pagine (se no, molla negare la richiesta), la lib spring-faces è in 2.4.1 che non ha questi tag per Facelets (XHTML).C'è un taglib di Spring Security 4.x per Facelets

Ho cercato di trovare un'implementazione per poter lavorare con il mio progetto usando questi framework ma non sono riuscito a trovarne nessuno, conosci qualche adattamento?

Nel mio caso, ho adattato solo la parte di cui avevo bisogno (a questo punto), se non ci sono adattamenti pubblici, sarei lieto di inserirlo in un progetto open source e provare ad adattare tutta la libreria.

Grazie.

UPDATE

ho creato un post sul blog che spiega la mia soluzione: http://halexv.blogspot.mx/2015/07/spring-security-4x-csrf-protection-for.html

+0

ne hai bisogno solo per i messaggi di forma? –

+0

In questo momento le funzioni che sto usando sono per csrf (due funzioni), l'avevo già portato ma ho visto molte funzioni interessanti. – AlexITC

+1

Al momento non esiste alcuna implementazione, quindi dovresti crearne uno tuo. Ci sono altri problemi con Spring Faces e la combinazione Spring Security 4 relativi a metodi, ecc. Rimossi da Spring Security ma ancora usati in Spring Faces. –

risposta

1

Hai la taglib molla per il JSF cui è possibile accedere da questo link.

http://docs.spring.io/spring-webflow/docs/current/reference/html/spring-faces.html#spring-faces-security-taglib

Credo che si conosce già questo. Ma la tua domanda effettiva è relativa allo CRSF che devi aggiungere a tutte le tue pagine. Questo in particolare può essere raggiunto con l'aggiunta del token automaticamente i moduli, come di seguito

Creare una classe util e aggiungere un generatore di token

static String getTokenForSession (HttpSession session) { 
String token = null; 
    synchronized (session) { 
    token = (String) session.getAttribute(CSRF_TOKEN_FOR_SESSION_ATTR_NAME); 
    if (null==token) { 
     token=UUID.randomUUID().toString(); 
     session.setAttribute(CSRF_TOKEN_FOR_SESSION_ATTR_NAME, token); 
    } 
} 
return token; 
} 

implementare RequestDataValueProcessor

public class CSRFRequestDataValueProcessor implements RequestDataValueProcessor { 
... 
@Override 
public Map<String,String> getExtraHiddenFields(HttpServletRequest request) { 
    Map<String,String> hiddenFields = new HashMap<String,String>(); 
    hiddenFields.put(CSRFTokenManager.CSRF_PARAM_NAME, CSRFTokenManager.getTokenForSession(request.getSession())); 
    return hiddenFields; 
    } 
} 

Quindi definire il fagiolo

<bean name="requestDataValueProcessor" class="com...CSRFRequestDataValueProcessor"/> 

Creadit Riferimento - http://blog.eyallupu.com/2012/04/csrf-defense-in-spring-mvc-31.html

+0

Spring Faces è il 2.4.1 (troppo vecchio), Ho adattato la parte CSRF per facelets, sto cercando alcuni come Spring Faces 4.x almeno – AlexITC

+0

Spring Faces è parte di Spring Webflow che è sulla versione 2.4.1. Spring Faces non è correlato a Spring o Spring Security ... Quindi provare a trovare una versione 4 non produrrà nulla. –

+0

Per quanto riguarda la risposta utilizzando un 'RequestDataValueProcessor' non funzionerà, questo funzionerà solo nel caso in cui venga utilizzato il tag' form' di Springs, dubito fortemente che sia disponibile per JSF. Accanto a [Spring Security] (http: //docs.spring.io/autorepo/docs/spring-security/current/apidocs/org/springframework/security/web/servlet/support/csrf/CsrfRequestDataValueProcessor.html) ha già un'integrazione per questo, quindi non è necessario scriverne di propri. –

Problemi correlati