spring - 是否有用于 Facelets 的 Spring Security 4.x 标签库

标签 spring spring-security facelets

我参与了一个使用 Spring Security 4.x 和 JSF 2.2 和 Facelets 的项目。我刚刚注意到这个版本中的spring security默认启用了使用请求 token 的跨站点请求伪造保护,这种情况是你必须放置标签<sec:csrfMetaTags>在许多页面中(如果没有,spring 拒绝请求),lib spring-faces在 2.4.1 中没有这些用于 Facelets (XHTML) 的标签。

我试图找到一个实现,以便使用这些框架来运行我的项目,但我找不到任何实现,你知道有什么适应吗?

就我而言,我只改编了我需要的部分(此时),如果没有公开改编,我很乐意将其放入开源项目并尝试改编所有库。

谢谢。

更新

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

最佳答案

您有 JSF 的 spring 标记库,您可以从此链接访问。

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

我相信你已经知道这一点。但您的实际问题与 有关CRSF 您必须将其添加到所有页面中。 这具体可以通过将 token 自动添加到您的表单中来实现,如下所示

创建一个 util 类并添加一个 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;
}

实现 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
<bean name="requestDataValueProcessor" class="com...CSRFRequestDataValueProcessor"/>

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

关于spring - 是否有用于 Facelets 的 Spring Security 4.x 标签库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293574/

相关文章:

java - Spring MVC 3.2.8 : FtpInboundFileSynchronizer

Spring 数据JPA : Efficient Way to Invoke Repository Methods with Optional Parameters

Spring 3.2 日期时间格式

jsf - jsf中的spring acl

java - Jsf 2.0 带有 Primefaces 的自定义标签

jsf-2 - :ajax doesn't work when parameters are passed using f:param

java - Hibernate 使用 or 运算符和动态限制从 List<Criterion> 构建查询

grails - 如何以编程方式注销 Grails 的 acegi 插件?

java - 尽管 {withCredentials :true},但未能在 GET 请求中发送 Cookie

jsf - h :link and parameters JSF