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
您拥有 JSF 的 spring 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
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |