2015-05-18 26 views
7

Jestem zaangażowany w pracę nad projektem przy użyciu Spring Security 4.x i JSF 2.2 z Facelets. Właśnie zauważyłem, że wiosenna ochrona w tej wersji domyślnie zapewnia ochronę przed Cross Forgery za pomocą Żetonów Żądań, jest tak, że musisz umieścić znacznik <sec:csrfMetaTags> na wielu stronach (jeśli nie, wiosenna odmowa przyjęcia żądania), biblioteka spring-faces jest w wersji 2.4.1, która nie ma tych tagów dla Facelets (XHTML).Czy istnieje taglib Spring Security 4.x dla Facelets

Próbowałem znaleźć implementację, aby móc pracować nad moim projektem przy użyciu tych frameworków, ale nie mogłem znaleźć żadnego, czy znasz jakieś adaptacje?

W moim przypadku zaadaptowałem tylko część, której potrzebowałem (w tym momencie), jeśli nie ma żadnych publicznych dostosowań, byłbym szczęśliwy, aby umieścić ją w projekcie o otwartym kodzie źródłowym i spróbować zaadaptować całą bibliotekę.

Dzięki.

UPDATE

stworzyłem blogu wyjaśniając moje rozwiązanie: http://halexv.blogspot.mx/2015/07/spring-security-4x-csrf-protection-for.html

+0

musisz go tylko do stanowisk formie? –

+0

W tym momencie funkcje, których używam są dla csrf (dwie funkcje), już je przeportowałem, ale widziałem wiele ciekawych funkcji. – AlexITC

+1

W tej chwili nie ma na to żadnej implementacji, więc trzeba byłoby utworzyć własne. Jest więcej problemów z kombinacją Spring Faces i Spring Security 4, jak z metodami usuniętymi ze Spring Security, ale wciąż używanymi w Spring Faces. –

Odpowiedz

1

Masz TagLib sprężyny dla JSF, który można uzyskać dostęp z tego linku.

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

Wierzę, że już o tym wiedzą. Ale twoje aktualne pytanie jest związane z CRSF, które musisz dodać do wszystkich swoich stron. to w szczególnych można osiągnąć dodając token automatycznie do formularzy poniżej

Tworzenie klasy util i dodać symboliczną generator

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; 
} 

wdrożyć 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; 
    } 
} 

Następnie zdefiniuj fasola

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

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

+0

Spring Faces jest na 2.4.1 (zbyt stary), Zaadaptowałem część CSRF na facele, szukam takich jak Spring Faces 4.x co najmniej – AlexITC

+0

Spring Faces jest częścią Spring Webflow, który jest w wersji 2.4.1. Spring Faces nie ma związku ze Spring and Spring Security ... Więc próba znalezienia wersji 4 niczego nie przyniesie. –

+0

Odnośnie odpowiedzi za pomocą 'RequestDataValueProcessor' nie zadziała to będzie działać tylko w przypadku, gdy Springs posiada własny znacznik' form', bardzo wątpię, że jest on dostępny dla JSF. Obok tego [Spring Security] (http: //docs.spring.io/autorepo/docs/spring-security/current/apidocs/org/springframework/security/web/servlet/support/csrf/CsrfRequestDataValueProcessor.html) ma już integrację, więc nie trzeba pisać samemu. –