是否有Facelets的Spring Security 4.x标记库

Ale*_*ITC 7 spring facelets spring-security

我参与了使用Spring Security 4.x和使用Facelets的JSF 2.2的项目.我只是注意到这个版本中的spring安全性默认情况下启用了使用请求令牌来防止跨站点请求伪造,情况是你必须将标记<sec:csrfMetaTags>放在许多页面中(如果没有,春天拒绝请求),lib spring-faces是在2.4.1中没有Facelets(XHTML)的这些标签.

我试图找到一个实现,以便使用这些框架来工作我的项目,但我找不到任何,你知道任何改编吗?

在我的情况下,我只调整了我需要的部分(此时),如果没有公共改编,我很乐意将它放入一个开源项目并尝试调整所有库.

谢谢.

UPDATE

我创建了一篇博客文章解释我的解决方案:http: //halexv.blogspot.mx/2015/07/spring-security-4x-csrf-protection-for.html

Far*_*ook 1

您拥有 JSF 的 spring taglib,可以从此链接访问它。

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;
}
Run Code Online (Sandbox Code Playgroud)

实施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;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后定义bean

<bean name="requestDataValueProcessor" class="com...CSRFRequestDataValueProcessor"/>
Run Code Online (Sandbox Code Playgroud)

信用参考 - http://blog.eyallupu.com/2012/04/csrf-defense-in-spring-mvc-31.html