2015-05-18 4 views
7

Я участвую в проекте с использованием Spring Security 4.x и JSF 2.2 с Facelets. Я только заметил, что весенняя безопасность в этой версии включила по умолчанию защиту от Cross-Site Request Forgery с помощью токенов запросов, дело в том, что вам нужно поместить тег <sec:csrfMetaTags> на многие страницы (если нет, весна отрицает запрос), lib spring-faces находится в 2.4.1, у которого нет этих тегов для Facelets (XHTML).Есть ли весенняя безопасность 4.x taglib для Facelets

Я попытался найти реализацию, чтобы работать с моим проектом с использованием этих фреймворков, но я не мог найти их, знаете ли вы какую-либо адаптацию?

В моем случае я адаптировал только ту часть, в которой я нуждался (на данный момент), если нет публичных адаптаций, я был бы рад поместить ее в проект с открытым исходным кодом и попытаться адаптировать всю библиотеку.

Спасибо.

UPDATE

Я создал запись в блоге, объясняя свое решение: http://halexv.blogspot.mx/2015/07/spring-security-4x-csrf-protection-for.html

+0

вам это нужно только для форм сообщений? –

+0

В этот момент функции, которые я использую, предназначены для csrf (две функции), я уже портировал его, но я видел много интересных функций. – AlexITC

+1

В настоящее время этот проект не используется, поэтому вам нужно будет создать свой собственный. Есть больше проблем с Spring Faces и комбинацией Spring Security 4 в отношении методов и т. Д., Удаленных из Spring Security, но все еще используемых в Spring Faces. –

ответ

1

У вас есть пружинный TagLib для JSF, который вы можете получить доступ по этой ссылке.

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

Я полагаю, вы уже знаете об этом. Но ваш фактический вопрос связан с CRSF, который вы должны добавить ко всем своим страницам. Это в конкретном может быть достигнут путем добавления маркеров автоматически в формы, как показано ниже

Создать класс Util и добавить маркер генератор

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

реализация 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; 
    } 
} 

Затем определите боб

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

Creadit Ссылка - http://blog.eyallupu.com/2012/04/csrf-defense-in-spring-mvc-31.html

+0

Spring Faces находится на 2.4.1 (слишком старый), Я адаптировал часть CSRF для facelets, я ищу некоторые, например Spring Faces 4.x, по крайней мере – AlexITC

+0

Spring Faces является частью Spring Webflow, который находится на версии 2.4.1. Spring Faces не имеет отношения к Spring или Spring Security ... Поэтому попытка найти версию 4 ничего не даст. –

+0

Что касается ответа с использованием 'RequestDataValueProcessor', это не будет работать, это будет работать только в том случае, если используется собственный тег' form', который имеет Springs, но я очень сомневаюсь, что это доступно для JSF. Рядом с этим [Spring Security] (http: //docs.spring.io/autorepo/docs/spring-security/current/apidocs/org/springframework/security/web/servlet/support/csrf/CsrfRequestDataValueProcessor.html) уже имеет интеграцию для этого, поэтому нет необходимости писать свои собственные. –

Смежные вопросы